home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #14 / Monster Media No. 14 (April 1996) (Monster Media, Inc.).ISO / prog_gen / inter49c.zip / INTERRUP.J < prev    next >
Text File  |  1996-02-11  |  361KB  |  9,575 lines

  1. Interrupt List, part 10 of 14
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996 Ralf Brown
  3. --------F-2FCB00-----------------------------
  4. INT 2F - Communicating Applications Specification - INSTALLATION CHECK
  5.     AX = CB00h
  6. Return: AL = status
  7.         00h not installed, OK to install
  8.         01h not installed, not OK to install
  9.         FFh installed
  10. Note:    AH = CBh is the default identifier, but may be reconfigured
  11. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=CB0Eh,AX=CBDCh
  12. --------F-2FCB00BX4D53-----------------------
  13. INT 2F - MTEZ XpressFax CASMGR - INSTALLATION CHECK
  14.     AX = CB00h
  15.     BX = 4D53h ('MS')
  16.     CX = 4949h ('II')
  17. Return: AL = status
  18.         00h not installed, OK to install
  19.         01h not installed, not OK to install
  20.         FFh installed
  21.         BX = 6D73h ('ms')
  22.         CX = 6969h ('ii')
  23. Note:    this function is equivalent to the standard CASMGR installation check,
  24.       but uses the additional magic values to identify which CAS is
  25.       installed
  26. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=C000h/BX=444Bh,AX=CB0Eh,AX=CB16h
  27. --------F-2FCB01-----------------------------
  28. INT 2F - Communicating Applications Specification - SUBMIT A TASK
  29.     AX = CB01h
  30.     DS:DX -> ASCIZ name of task control file
  31. Return: AX >= 0: event handle
  32.     AX < 0: two's complement of error code (see #2202)
  33. Note:    files needed for an event must be kept until task is complete or error
  34. SeeAlso: AX=CB0Bh,AX=CB15h
  35.  
  36. (Table 2202)
  37. Values for CAS error code:
  38.   (AH = class, AL = subcode, value passed back is 2's complement)
  39.   Class 00h    --- FAX warnings
  40.     Subcode 00h    no error
  41.         02h    bad scanline count
  42.         03h    page sent with errors, could not retransmit
  43.         04h    received data lost
  44.         05h    invalid or missing logo file
  45.         06h    filename does not match nonstandard format (NSF) header
  46.         07h    file size does not match NSF header
  47.   Class 01h    --- DOS warnings (data was sent)
  48.     Subcode 01h    invalid function
  49.         05h    access denied
  50.         06h    invalid handle
  51.         others    see INT 21/AH=59h
  52.   Class 02h    --- fatal errors (data not sent)
  53.     Subcode 00h    multiplex handler failed
  54.         01h    unknown command
  55.         02h    bad event handle
  56.         03h    FIND NEXT attempted before FIND FIRST
  57.         04h    no more events
  58.         07h    invalid queue type
  59.         08h    bad control file
  60.         09h    communication board busy
  61.         0Ah    invalid command parameter
  62.         0Bh    can't uninstall resident code
  63.         0Ch    file exists
  64.         80h    unknown task type
  65.         81h    bad phone number
  66.         82h    bad .PCX file header
  67.         83h    unexpected EOF
  68.         84h    unexpected disconnect
  69.         85h    too many dialing retries
  70.         86h    no file specified for send
  71.         87h    communication board timeout
  72.         88h    received too many pages (>1023) of data
  73.         89h    manual connect initiated too long ago
  74.         8Ah    hardware command set error
  75.         8Bh    bad NonStandard Format (NSF) header file
  76.   Class 03h    --- fatal DOS errors
  77.     Subcode 02h    file not found
  78.         03h    path not found
  79.         others    see INT 21/AH=59h
  80.   Class 04h    --- FAX errors
  81.     Subcode 01h    remote unit not Group 3 compatible
  82.         02h    remote unit did not send capabilities
  83.         03h    other FAX machine incompatible
  84.         04h    other FAX incapable of file transfers
  85.         05h    exceeded retrain or FAX resend limit
  86.         06h    line noise or failure to agree on bit rate
  87.         07h    remote disconnected after receiving data
  88.         08h    no response from remote after sending data
  89.         09h    remote's capabilities incompatible
  90.         0Ah    no dial tone (v1.2+)
  91.         0Bh    invalid response from remote unit after sending data
  92.         0Dh    phone line dead or remote unit disconnected
  93.         0Eh    timeout while waiting for secondary dial tone (v1.2+)
  94.         11h    invalid command from remote after receiving data
  95.         15h    tried to receive from incompatible hardware
  96.         5Ch    received data overflowed input buffer
  97.         5Dh    remote unexpectedly stopped sending data
  98.         5Eh    other FAX machine jammed (no data sent)
  99.         5Fh    remote took too long to send fax scan line
  100.         63h    can't get through to remote unit
  101.         64h    user canceled event
  102.   Class 05h    --- application-specific (v1.2+)
  103.   ---Intel FAXPOP.EXE
  104.     Subcode 00h    tried to send while in graphics mode
  105.         01h    insufficient disk space
  106.         02h    internal buffer overflow
  107.   Class 06h    --- CAS implementation-specific (v1.2+)
  108. --------F-2FCB02-----------------------------
  109. INT 2F - Communicating Applications Specification - ABORT CURRENT EVENT
  110.     AX = CB02h
  111. Return: AX >= 0: event handle of aborted event
  112.     AX < 0: error code (see #2202)
  113. Note:    termination could take up to 30 seconds
  114. SeeAlso: AX=CB08h,AX=CB10h
  115. --------F-2FCB05-----------------------------
  116. INT 2F - Communicating Applications Specification - FIND FIRST QUEUE ENTRY
  117.     AX = CB05h
  118.     CX = status of events to find
  119.         0000h successful completion
  120.         0001h waiting to be processed
  121.         0002h number has been dialed
  122.         0003h connection established, sending
  123.         0004h connection established, receiving
  124.         0005h event aborted
  125.         FFFFh find any event, regardless of status
  126.         other negative values, match error code
  127.     DH = direction
  128.         00h chronological order, earliest to latest
  129.         01h reverse chronological order, latest to earliest
  130.     DL = queue to search
  131.         00h task queue
  132.         01h receive queue
  133.         02h log queue
  134. Return: AX = 0000h successful
  135.         BX = event handle for found event
  136.     AX < 0       error code (see #2202)
  137. SeeAlso: AX=CB06h,AX=CB07h
  138. --------F-2FCB06-----------------------------
  139. INT 2F - Communicating Applications Specification - FIND NEXT QUEUE ENTRY
  140.     AX = CB06h
  141.     DL = queue to search
  142.         00h task queue
  143.         01h receive queue
  144.         02h log queue
  145. Return: AX = 0000h successful
  146.         BX = event handle for found event
  147.     AX < 0       error code (see #2202)
  148. Note:    direction of search is same as preceding FIND FIRST call
  149. SeeAlso: AX=CB05h
  150. --------F-2FCB07-----------------------------
  151. INT 2F - Communicating Applications Specification - OPEN FILE
  152.     AX = CB07h
  153.     BX = event handle from find (AL=05h,06h) or submit task (AL=01h)
  154.     CX = receive file number (ignored for task queue and log queue)
  155.         0000h  open receive control file
  156.         N       open Nth received data file
  157.     DL = queue
  158.         00h task queue
  159.         01h receive queue control file or received file, as given by CX
  160.         02h log queue
  161.         03h group file in task queue (v1.2+)
  162.         04h group file in log queue (v1.2+)
  163. Return: AX = 0000h successful
  164.         BX = DOS file handle for requested file
  165.     AX < 0       error code (see #2202)
  166. Note:    the returned file handle has been opened in read-only mode and should
  167.       be closed with INT 21/AH=3Eh after use
  168. SeeAlso: AX=CB01h,AX=CB05h,AX=CB14h
  169. --------F-2FCB08-----------------------------
  170. INT 2F - Communicating Applications Specification - DELETE FILE
  171.     AX = CB08h
  172.     BX = event handle
  173.     CX = receive file number
  174.         0000h delete ALL received files and receive control file
  175.         N      delete Nth received file
  176.     DL = queue
  177.         00h delete control file in task queue and corresponding group file
  178.           if it exists
  179.         01h delete file in receive queue, as given by CX
  180.         02h delete control file in log queue (individual deletions not
  181.           recommended, to maintain integrity of log) and corresponding
  182.           group file if it exists
  183. Return: AX = 0000h successful
  184.     AX < 0       error code (see #2202)
  185. SeeAlso: AX=CB02h,AX=CB09h
  186. --------F-2FCB09-----------------------------
  187. INT 2F - Communicating Applications Specification - DELETE ALL FILES IN Q
  188.     AX = CB09h
  189.     DL = queue
  190.         00h delete all control files in task queue, including all group
  191.           files
  192.         01h delete all files in receive queue
  193.         02h delete all control files in log queue, including all group
  194.           files
  195. Return: AX = 0000h successful
  196.     AX < 0       error code (see #2202)
  197. SeeAlso: AX=CB08h
  198. --------F-2FCB0A-----------------------------
  199. INT 2F - Communicating Applications Specification - GET EVENT DATE
  200.     AX = CB0Ah
  201.     BX = event handle
  202.     DL = queue
  203.         00h task queue
  204.         01h receive queue
  205.         02h log queue
  206. Return: AX = 0000h successful
  207.         CX = year
  208.         DH = month
  209.         DL = day
  210.     AX < 0       error code (see #2202)
  211. SeeAlso: AX=CB0Bh,AX=CB0Ch
  212. --------F-2FCB0B-----------------------------
  213. INT 2F - Communicating Applications Specification - SET TASK DATE
  214.     AX = CB0Bh
  215.     BX = event handle (task event only)
  216.     CX = year
  217.     DH = month
  218.     DL = day
  219. Return: AX = 0000h successful
  220.     AX < 0       error code (see #2202)
  221. Note:    setting a task's date and time to before the current date and time
  222.       causes it to execute immediately
  223. SeeAlso: AX=CB01h,AX=CB0Ah,AX=CB0Dh
  224. --------F-2FCB0C-----------------------------
  225. INT 2F - Communicating Applications Specification - GET EVENT TIME
  226.     AX = CB0Ch
  227.     BX = event handle
  228.     DL = queue
  229.         00h task queue
  230.         01h receive queue
  231.         02h log queue
  232. Return: AX = 0000h successful
  233.         CH = hour
  234.         CL = minute
  235.         DH = second
  236.         DL = 00h
  237.     AX < 0       error code (see #2202)
  238. SeeAlso: AX=CB0Ah,AX=CB0Dh
  239. --------F-2FCB0D-----------------------------
  240. INT 2F - Communicating Applications Specification - SET TASK TIME
  241.     AX = CB0Dh
  242.     BX = event handle (task events only)
  243.     CH = hour
  244.     CL = minute
  245.     DH = second
  246.     DL unused
  247. Return: AX = 0000h successful
  248.     AX < 0       error code (see #2202)
  249. Note:    setting a task's date and time to before the current date and time
  250.       causes it to execute immediately
  251. SeeAlso: AX=CB0Bh,AX=CB0Ch,AX=CB10h
  252. --------F-2FCB0E-----------------------------
  253. INT 2F - Communicating Applications Specification - GET EXTERNAL DATA BLOCK
  254.     AX = CB0Eh
  255.     DS:DX -> 256-byte buffer for external data block (see #2203)
  256. Return: AX = 0000h successful
  257.         DS:DX buffer filled
  258.     AX < 0       error code (see #2202)
  259.  
  260. Format of CAS external data block:
  261. Offset    Size    Description    (Table 2203)
  262.  00h    BYTE    CAS major version
  263.  01h    BYTE    CAS minor version
  264.  02h 68 BYTEs    ASCIZ path to directory containing CAS software, ends in slash
  265.  46h 13 BYTEs    ASCIZ name of current phonebook (in CAS directory)
  266.  53h 13 BYTEs    ASCIZ name of current logo file (in CAS directory)
  267.  60h 32 BYTEs    ASCIZ default sender name
  268.  80h 21 BYTEs    ASCIZ CCITT identification of fax device
  269.  95h 107 BYTEs    reserved
  270. --------F-2FCB0F-----------------------------
  271. INT 2F - Communicating Applications Specification - GET/SET AUTORECEIVE
  272.     AX = CB0Fh
  273.     DL = subfunction
  274.         00h get current autoreceive state
  275.         01h set autoreceive state
  276.         DH = number of rings before answer, 00h = never
  277. Return: AX = 0000h autoreceive disabled
  278.     AX = N       number of rings before answer
  279.     AX < 0       error code (see #2202)
  280. --------F-2FCB10-----------------------------
  281. INT 2F - Communicating Applications Specification - GET CURRENT EVENT STATUS
  282.     AX = CB10h
  283.     DS:DX -> 512-byte buffer for status area (see #2205)
  284. Return: AX = 0000h successful
  285.         BX = event handle of current event or negative error code if
  286.               no current event
  287.         buffer filled
  288.     AX < 0       error code (see #2202)
  289. SeeAlso: AX=CB02h,AX=CB0Dh
  290.  
  291. (Table 2204)
  292. Values for CAS event type:
  293.  00h    send
  294.  01h    receive
  295.  02h    polled send
  296.  03h    polled receive
  297.  04h to 7Fh reserved
  298.  FFh    serious hardware error
  299.  
  300. Format of CAS status area:
  301. Offset    Size    Description    (Table 2205)
  302.  00h    BYTE    event type (see #2204)
  303.  01h    BYTE    transfer type
  304.         00h 200x200 dpi, FAX mode
  305.         01h 100x200 dpi, FAX mode
  306.         02h file transfer mode
  307.         03h to 7Fh reserved
  308.  02h    WORD    event status (see #2206)
  309.  04h    WORD    event time (packed DOS time format, see INT 21/AX=5700h)
  310.  06h    WORD    event date (packed DOS date format, see INT 21/AX=5700h)
  311.  08h    WORD    number of files to transfer, max 7FFFh
  312.  0Ah    WORD    offset of file transfer record
  313.  0Ch 47 BYTEs    ASCIZ phone number to call
  314.  3Bh 64 BYTEs    ASCIZ application-specific tag string
  315.  7Bh    BYTE    reserved (00h)
  316.  7Ch    BYTE    connect time, seconds
  317.  7Dh    BYTE    connect time, minutes
  318.  7Eh    BYTE    connect time, hours
  319.  7Fh    DWORD    total number of pages in all files
  320.  83h    DWORD    pages already transmitted
  321.  87h    WORD    number of files already transmitted
  322.  89h    BYTE    cover page flag
  323.         00h don't transmit cover page
  324.         01h transmit cover page
  325.         02h to 7Fh reserved
  326.  8Ah    WORD    total number of transmission errors
  327.  8Ch 78 BYTEs    reserved (zeros)
  328.  DAh 21 BYTEs    ASCIZ remote FAX's CCITT identification
  329.  EFH 32 BYTEs    ASCIZ destination name
  330. 10Fh 32 BYTEs    ASCIZ sender name
  331. 12Fh 80 BYTEs    filename of PCX logo file (max 1780x800 pixels)
  332. 17Fh 128 BYTEs    file transfer record for current event (see #2207)
  333.  
  334. (Table 2206)
  335. Values for CAS event status:
  336.  0000h    completed successfully
  337.  0001h    waiting
  338.  0002h    number dialed
  339.  0003h    connected, sending
  340.  0004h    connected, receiving
  341.  0005h    aborted
  342.  0006h to 007Fh reserved
  343.  0080h to 7FFFh application-specific events
  344.  8000h to FFFFh error codes
  345.  
  346. Format of CAS file transfer record:
  347. Offset    Size    Description    (Table 2207)
  348.  00h    BYTE    file type (ignored unless FAX)
  349.         00h ASCII
  350.         01h PCX
  351.         02h DCX
  352.         03h to 7Fh reserved
  353.  01h    BYTE    text size for ASCII FAX file
  354.         00h = 80 columns by 66 lines (11 inches)
  355.         01h = 132 columns by 88 lines (11 inches)
  356.         02h to 7Fh reserved
  357.  02h    BYTE    status of file
  358.         00h untouched
  359.         01h opened
  360.         02h moved
  361.         03h deleted
  362.         04h not yet received
  363.         05h to 7Fh reserved
  364.  03h    DWORD    bytes already transmitted
  365.  07h    DWORD    file size in bytes
  366.  0Bh    WORD    pages alread transmitted
  367.  0Dh    WORD    number of pages in file
  368.  0Fh 80 BYTEs    ASCIZ filename
  369.  5Fh    BYTE    1/8 inch page length
  370.         if page length below set to 01h through 7Fh, this value
  371.           specifies additional 1/8 inch increments to page length
  372.  60h    BYTE    page length
  373.         00h = 11 inches
  374.         01h to 7Fh = page length is this number of inches plus value of
  375.               1/8 inch field above
  376.         80h to FEh reserved
  377.         FFh = ASCII pages ending with formfeed
  378.  61h 31 BYTEs    reserved (zeros)
  379. --------F-2FCB11-----------------------------
  380. INT 2F - Communicating Applications Specification - GET QUEUE STATUS
  381.     AX = CB11h
  382.     DL = queue to get status of
  383.         00h task queue
  384.         01h receive queue
  385.         02h log queue
  386.         03h send events (v1.2+)
  387.         04h receive events (v1.2+)
  388. Return: AX >= 0     total number of changes made to queue, modulo 32768
  389.         BX = number of control files currently in queue
  390.         CX = number of received files (zero for task and log queues)
  391.     AX < 0    error code (see #2202)
  392. SeeAlso: AX=CB12h
  393. --------F-2FCB11DL03-------------------------
  394. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF SEND EVENTS
  395.     AX = CB11h
  396.     DL = 03h
  397. Return: AX = number of successful sends since resident manager started
  398.     BX = number of unsuccessful sends, including warnings
  399. SeeAlso: AX=CB11h/DL=04h
  400. --------F-2FCB11DL04-------------------------
  401. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF RECEIVE EVENTS
  402.     AX = CB11h
  403.     DL = 04h
  404. Return: AX = number of received file events since resident manager started
  405.     BX = number of received FAX events
  406. SeeAlso: AX=CB11h/DL=03h
  407. --------F-2FCB12-----------------------------
  408. INT 2F - Communicating Applications Specification - GET HARDWARE STATUS
  409.     AX = CB12h
  410.     DS:DX -> 128-byte status buffer (see #2208,#2210)
  411. Return: AX = 0000h successful
  412.         DS:DX buffer filled with hardware-dependent status information
  413.        < 0       error code (see #2202)
  414. SeeAlso: AX=CB10h,AX=CB11h
  415.  
  416. Format of status buffer for Intel Connection CoProcessor:
  417. Offset    Size    Description    (Table 2208)
  418.  00h    BYTE    Connection CoProcessor connection status flags (see #2211)
  419.  01h    BYTE    number of kilobytes of free buffer space
  420.  02h    BYTE    page buffer status
  421.         bit 7: Connection CoProcessor has documents to send
  422.         bits 6-0: number of pages in buffer
  423.  03h    BYTE    number of retries left for dialing number
  424.  04h    BYTE    page number to retransmit
  425.  05h    BYTE    communications status (see #2212)
  426.  06h    BYTE    baud rate (see #2209)
  427.  07h  3 BYTEs    reserved
  428.  0Ah    BYTE    Connection CoProcessor hardware status (see #2213)
  429.  0Bh    BYTE    Connection CoProcessor switch states (see #2214)
  430.  0Ch    BYTE    communications flags (see #2215)
  431.  0Dh    BYTE    reserved
  432.  0Eh    WORD    error count (only valid while busy, reset when idle)
  433.  10h    DWORD    size of nonstandard format (NSF) file in bytes
  434.  14h    BYTE    'A' if Connection CoProcessor board present
  435.  15h  9 BYTEs    reserved
  436.  1Eh 21 BYTEs    ASCIZ CCITT identification
  437.  33h 77 BYTEs    reserved
  438. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  439.       by examining the byte at offset 14h
  440.  
  441. Bitfields for Connection CoProcessor baud rate:
  442. Bit(s)    Description    (Table 2209)
  443.  7    reserved
  444.  6-4    baud rate
  445.     000 = 300 baud    (V.21 SDLC or HDLC mode)
  446.     100 = 2400 baud (V.27 ter)
  447.     101 = 4800 baud (V.27 ter)
  448.     110 = 7200 baud (V.29)
  449.     111 = 9600 baud (V.29)
  450.  3-0    reserved, should be 0110
  451.  
  452. Format of status buffer for Intel SatisFAXtion board:
  453. Offset    Size    Description    (Table 2210)
  454.  00h    BYTE    SatisFAXtion connection status flags (see #2216)
  455.  01h    BYTE    SatisFAXtion board state (see #2217)
  456.  02h    BYTE    number of KB free in buffer
  457.  03h    BYTE    number of pages or files in buffer
  458.  04h    BYTE    number of redials remaining on current number
  459.  05h    BYTE    FAX page number to retransmit
  460.  06h    BYTE    current page/file in block transfer
  461.  07h    BYTE    number of rings received (only if auto-answer enabled)
  462.  08h    WORD    error count
  463.  0Ah    DWORD    length of file being transferred
  464.  0Eh  6 BYTEs    reserved
  465.  14h    BYTE    'B' if SatisFAXtion board present
  466.  15h 13 BYTEs    ASCIZ transfer agent name
  467.  22h  5 BYTEs    ASCIZ transfer agent version number
  468.  27h 13 BYTEs    ASCIZ resident loader name
  469.  34h  5 BYTEs    ASCIZ resident loader version number
  470.  39h 21 BYTEs    ASCIZ remote CSID
  471.  4Eh 13 BYTEs    ASCIZ resident manager name
  472.  5Bh  5 BYTEs    ASCIZ resident manager version number
  473.  60h 32 BYTEs    reserved
  474. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  475.       by examining the byte at offset 14h
  476.  
  477. Bitfields for Connection CoProcessor connection status flags:
  478. Bit(s)    Description    (Table 2211)
  479.  7    hardware busy sending or receiving
  480.  6    last page of data
  481.  5    no data on current page
  482.  4    retransmit request for current page being transmitted
  483.  3    NSF (nonstandard file) mode active
  484.  2-0    reserved
  485.  
  486. Bitfields for communications status:
  487. Bit(s)    Description    (Table 2212)
  488.  7    originating call
  489.  6    FAX message to be sent
  490.  5    on line
  491.  4    ring detected and receive enabled
  492.  3    buffer dumped on receive
  493.  2-0    hardware sequence state
  494.     000 idle
  495.     001 dial
  496.     010 answer
  497.     011 transmit
  498.     100 receive
  499.     101 pre-message
  500.     110 post-message
  501.     111 disconnect
  502.  
  503. Bitfields for Connection CoProcessor hardware status:
  504. Bit(s)    Description    (Table 2213)
  505.  7    modem option installed
  506.  6    Connection CoProcessor has control of DAA (not latched)
  507.  5    on line (not latched)
  508.  4    ring detected (not latched)
  509.  3    data in command buffer (not latched)
  510.  2    set if using DMA channel 1, clear if using DMA channel 3
  511.  1    line length compensation 1 set (not latched)
  512.  0    line length compensation 0 set (not latched)
  513.  
  514. Bitfields for Connection CoProcessor switch states:
  515. Bit(s)    Description    (Table 2214)
  516.  7    reserved
  517.  6    unused
  518.  5    spare switch open
  519.  4    FAX ADR1 switch open
  520.  3    FAX ADR0 switch open
  521.  2    alternate interrupt switch open
  522.  1    COM SEL 1 switch open
  523.  0    COM SEL 0 switch open
  524. Note:    valid combinations of 0-2 are
  525.     000  COM2 IRQ3 IObase 2F8h
  526.     001  COM1 IRQ4 IObase 3F8h
  527.     010  COM4 IRQ3 IObase 2E8h
  528.     011  COM3 IRQ4 IObase 3E8h
  529.     110  COM4 IRQ2 IObase 2E8h
  530.     111  COM3 IRQ5 IObase 3E8h
  531.  
  532. Bitfields for communications flags:
  533. Bit(s)    Description    (Table 2215)
  534.  7    reserved
  535.  6    auxiliary relay forced ON
  536.  5    modem select relay forced ON
  537.  4    offhook relay forced ON
  538.  3    9600 bps enabled
  539.  2    7200 bps enabled
  540.  1    4800 bps enabled
  541.  0    2400 bps enabled
  542.  
  543. Bitfields for SatisFAXtion connection status flags:
  544. Bit(s)    Description    (Table 2216)
  545.  7    busy in T.30 CCITT fax protocol
  546.  6    data on current page/file (only used for block xfers)
  547.  5    retransmission of last page requested
  548.  4    in file transfer mode
  549.  3    data in buffer
  550.  2    data buffer dumped on receive
  551.  1    200x100 dpi resolution instead of 200x200 dpi
  552.  0    data modem in use, FAX image modem not available
  553.  
  554. Bitfields for SatisFAXtion board state:
  555. Bit(s)    Description    (Table 2217)
  556.  7    reserved
  557.  6    handset jack active, data and FAX modems not available
  558.  5-3    current rate
  559.     000  300 bps (V.21 HDLC)
  560.     100 2400 bps (V.27 ter)
  561.     101 4800 bps (V.27 ter)
  562.     110 7200 bps (V.29)
  563.     111 9600 bps (V.29)
  564.  2-0    T.30 CCITT protocol state
  565.     000 idle
  566.     001 dialing
  567.     010 answering
  568.     011 transmitting
  569.     100 receiving
  570.     101 pre-message
  571.     110 post-message
  572.     111 disconnect
  573. --------F-2FCB13DL00-------------------------
  574. INT 2F - Communicating Applications Specification - GET DIAGNOSTICS RESULTS
  575.     AX = CB13h
  576.     DL = 00h
  577. Return: AX = 0040h in progress
  578.        >= 0       passed
  579.        < 0       hardware-dependent failure code (see #2218,#2219)
  580. SeeAlso: AX=CB13h/DL=01h
  581.  
  582. Bitfields for Intel Connection CoProcessor failure codes:
  583. Bit(s)    Description    (Table 2218)
  584.  3    9600 bps FAX modem module failed
  585.  2    SDLC chip failed
  586.  1    RAM failed
  587.  0    ROM checksum failed
  588.  
  589. Bitfields for Intel SatisFAXtion failure codes:
  590. Bit(s)    Description    (Table 2219)
  591.  1    2400 bps data modem failed
  592.  0    9600 bps FAX modem failed
  593. --------F-2FCB13DL01-------------------------
  594. INT 2F - Communicating Applications Specification - START DIAGNOSTICS
  595.     AX = CB13h
  596.     DL = 01h
  597. Return: AX = 0000h successfully started
  598.     AX < 0       error code (see #2202)
  599. SeeAlso: AX=CB13h/DL=00h
  600. --------F-2FCB14-----------------------------
  601. INT 2F - Communicating Applications Specification - MOVE RECEIVED FILE
  602.     AX = CB14h
  603.     BX = event handle
  604.     CX = receive file number
  605.         0001h first received file
  606.         N      Nth received file
  607.     DS:DX -> ASCIZ string specifying new name for file (must not exist)
  608. Return: AX = 0000h successful
  609.     AX < 0       error code (see #2202)
  610. --------F-2FCB15-----------------------------
  611. INT 2F - Communicating Applications Specification - SUBMIT FILE TO SEND
  612.     AX = CB15h
  613.     DS:DX -> variable-length data area (see #2220)
  614. Return: AX >= 0 event handle
  615.     AX < 0    error code (see #2202)
  616. SeeAlso: AX=CB01h
  617.  
  618. Format of CAS file submission data area:
  619. Offset    Size    Description    (Table 2220)
  620.  00h    BYTE    transfer type
  621.         00h = 200x200 dpi, fax mode
  622.         01h = 100x200 dpi, fax mode
  623.         02h = file transfer mode
  624.         03h to 7Fh reserved
  625.  01h    BYTE    text size
  626.         00h = 80 columns
  627.         01h = 132 columns
  628.         02h to 7Fh reserved
  629.  02h    WORD    time to send (DOS packed time, see #0951 at INT 21/AX=5700h)
  630.  04h    WORD    date to send (DOS packed date, see #0952 at INT 21/AX=5700h)
  631.  06h 32 BYTEs    ASCIZ destination name
  632.  26h 80 BYTEs    ASCIZ name of file to send
  633.  76h 47 BYTEs    ASCIZ phone number to dial
  634.  A5h 64 BYTEs    ASCIZ application-specific tag string
  635.  E5h    BYTE    reserved (00h)
  636.  E6h    BYTE    cover page
  637.         00h don't send cover page
  638.         01h send cover page
  639.         02h to 7Fh reserved
  640.  E7h 23 BYTEs    reserved (zeros)
  641.  FEh variable    ASCIZ string containing text of cover page (if cover page flag
  642.         set to 01h)
  643. --------F-2FCB16BX1234-----------------------
  644. INT 2F - Communicating Applications Spec v1.2+ - UNLOAD RESIDENT MANAGER
  645.     AX = CB16h
  646.     BX = 1234h
  647.     CX = 5678h
  648.     DX = 9ABCh
  649. Return: AX = 0000h successful
  650.     AX < 0       error code
  651. Note:    the MTEZ XpressFax CASMGR ignores the values in BX,CX, and DX
  652. SeeAlso: AX=C000h/BX=444Bh,AX=CB00h
  653. Index:    uninstall;CAS Manager
  654. --------F-2FCB17-----------------------------
  655. INT 2F - Communicating Applications Spec v1.2+ - SET COVER PAGE STATUS
  656.     AX = CB17h
  657.     BX = event handle
  658.     CL = cover page status
  659.         00h not read
  660.         01h read by user
  661. Return: AX = 0000h successful
  662.     AX < 0       error code
  663. --------F-2FCB80-----------------------------
  664. INT 2F - Intel SatisFAXtion CASMGR - ???
  665.     AX = CB80h
  666.     ???
  667. Return: ???
  668. --------F-2FCB81-----------------------------
  669. INT 2F - Intel SatisFAXtion CASMGR - ???
  670.     AX = CB81h
  671.     ???
  672. Return: ???
  673. --------F-2FCB82-----------------------------
  674. INT 2F - Intel SatisFAXtion CASMGR - ???
  675.     AX = CB82h
  676.     ???
  677. Return: ???
  678. --------F-2FCBDCBL56-------------------------
  679. INT 2F - Comwave Microfax Specification - GET STATUS ARRAY
  680.     AX = CBDCh
  681.     BL = 56h
  682.     BH = line number (starts with 1)
  683.     CX:DX -> 32-byte status buffer or 80 character string
  684. Return: AX = number of cards installed, or FFFFh on error
  685. Program: Comwave manufacturers the Microfax line of fax cards which are a high-
  686.       performance multi-card FAX solution for OEMs.
  687. Note:    defaults to AH=CBh but can be changed
  688. SeeAlso: AX=CBDDh,AX=DA00h
  689. --------F-2FCBDDBL56-------------------------
  690. INT 2F - Comwave Microfax Specification - COMMAND SUBMISSION
  691.     AX = CBDDh
  692.     BL = 56h
  693.     BH = ?
  694.     CX:DX -> command to execute
  695. Return: AX = status
  696.         0000h success
  697.         FFFFh on error
  698. SeeAlso: AH=2Ah,AX=CBDCh,AX=80FBh
  699. --------c-2FCC--SI5453-----------------------
  700. INT 2F U - PC-Kwik Programs - API
  701.     AH = CCh
  702.     SI = 5453h or 7473h
  703.     AL = function number (at least 00h,01h,04h,05h,07h,80h)
  704.     DL = program identifier (see #2221)
  705. Return: SI = 7473h
  706.     other registers vary by function
  707. Note:    Qualitas Qcache v4.00 is an OEM version of Super PC-Kwik v4.00, and
  708.       thus supports this call
  709. SeeAlso: INT 21/AH=2Bh/CX=4358h
  710.  
  711. (Table 2221)
  712. Values for PC-Kwik program identifier:
  713.  00h    all installed PowerPak programs
  714.  01h    SUPERPCK/SUPER/QCACHE v4.00+ (disk cache)
  715.  02h    PCKSPL (print spooler)
  716.  04h    PCKSCRN (screen accelerator)
  717.  05h    PCKKEY (keyboard enhancer)
  718.  06h    PCKRAMD (RAM disk)
  719.  08h    PCKWIK.SYS
  720.  10h    PCKCDROM (CD-ROM support for SUPERPCK)
  721. --------N-2FCC00-----------------------------
  722. INT 2F - Tsoft NFSDRVR - INSTALLATION CHECK
  723.     AX = CC00h
  724. Return: AX = 7777h
  725.     BX = ???
  726.     CX = ???
  727.     DX = ???
  728.     ES = data segment of resident portion
  729. SeeAlso: AX=CC01h,AX=CC06h
  730. --------N-2FCC01-----------------------------
  731. INT 2F - Tsoft NFSDRVR - ???
  732.     AX = CC01h
  733.     ???
  734. Return: ???
  735. SeeAlso: AX=CC00h
  736. --------N-2FCC02-----------------------------
  737. INT 2F - Tsoft NFSDRVR - ???
  738.     AX = CC02h
  739.     ???
  740. Return: ???
  741. SeeAlso: AX=CC00h
  742. --------N-2FCC03-----------------------------
  743. INT 2F - Tsoft NFSDRVR - ???
  744.     AX = CC03h
  745.     ???
  746. Return: ???
  747. SeeAlso: AX=CC00h
  748. --------N-2FCC04-----------------------------
  749. INT 2F - Tsoft NFSDRVR - ???
  750.     AX = CC04h
  751.     ???
  752. Return: ???
  753. SeeAlso: AX=CC00h
  754. --------N-2FCC05-----------------------------
  755. INT 2F - Tsoft NFSDRVR - ???
  756.     AX = CC05h
  757.     ???
  758. Return: ???
  759. SeeAlso: AX=CC00h
  760. --------N-2FCC06-----------------------------
  761. INT 2F - Tsoft NFSDRVR - ???
  762.     AX = CC06h
  763.     ???
  764. Return: ???
  765. SeeAlso: AX=CC00h
  766. --------P-2FCD00-----------------------------
  767. INT 2F - Intel Image Processing Interface - INSTALLATION CHECK
  768.     AX = CD00h
  769. Return: AL = state
  770.         00h not installed, OK to install
  771.         01h not installed, not OK to install
  772.         FFh installed
  773. SeeAlso: AX=CD02h"Image"
  774. --------P-2FCD00-----------------------------
  775. INT 2F - LaserPort Interface - INSTALLATION CHECK
  776.     AX = CD00h
  777. Return: AL = status
  778.         FFh installed
  779. SeeAlso: AX=CD0Fh"LaserPort"
  780. --------U-2FCD00-----------------------------
  781. INT 2F - SWELL.EXE - INSTALLATION CHECK
  782.     AX = CD00h
  783. Return: AX = 00FFh installed
  784.         BH = major version
  785.         BL = minor version
  786. Program: SWELL.EXE is a TSR which swaps programs to disk when they EXEC a child
  787.       process with INT 21/AH=4Bh
  788. --------s-2FCD00BX464F-----------------------
  789. INT 2F - Forte/Gravis ULTRAMID - INSTALLATION CHECK
  790.     AX = CD00h
  791.     BX = 464Fh ('FO')
  792.     CX = 5254h ('RT')
  793.     DX = 4520h ('E ')
  794. Return: AL = FFh if installed
  795.         BX = 4155h ('AU')
  796.         CX = 4449h ('DI')
  797.         DX = 4F20h ('O ')
  798.         ES:SI -> program ID string
  799. Program: ULTRAMID is a MIDI driver for the Gravis UltraSound which allows use
  800.       of AIL drivers with other software
  801. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  802. SeeAlso: INT 21/AX=FD12h
  803. --------P-2FCD01-----------------------------
  804. INT 2F - Intel Image Processing Interface - SET DEVICE NAME
  805.     AX = CD01h
  806.     CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")
  807. Return: AL = status
  808.         00h successful
  809.         CX:BX -> internal character device name
  810.         80h error
  811. --------U-2FCD01-----------------------------
  812. INT 2F - SWELL.EXE - SUSPEND ONCE
  813.     AX = CD01h
  814. Return: AX = 0000h
  815. SeeAlso: AX=CD02h"SWELL"
  816. --------P-2FCD02-----------------------------
  817. INT 2F - Intel Image Processing Interface - GET VERSION NUMBER
  818.     AX = CD02h
  819. Return: AL = status
  820.         00h/01h successful
  821.         BH = major version number (BCD)
  822.         BL = minor version number (BCD)
  823.         80h error
  824. Note:    if return AL = 01h, the IPI supports network redirection
  825. SeeAlso: AX=CD00h"Image"
  826. --------U-2FCD02-----------------------------
  827. INT 2F - SWELL.EXE - SUSPEND
  828.     AX = CD02h
  829. Return: AX = 0000h
  830. SeeAlso: AX=CD03h"SWELL"
  831. --------P-2FCD03-----------------------------
  832. INT 2F - Intel Image Processing Interface - SELECT SCAN LINE
  833.     AX = CD03h
  834.     BX = scan line
  835.     CX = requested density in dots per inch (300, 600, or 1200)
  836. Return: AL = status (see also AX=CD04h"Image")
  837.         00h successful
  838.         CX = density at which scan line was mapped
  839.         ES:DI -> start of scan line
  840.         80h unsuccessful
  841.         81h scan line out of range
  842.         82h unsupported scan line density
  843.         83h out of memory
  844. SeeAlso: AX=CD04h"Image"
  845. --------U-2FCD03-----------------------------
  846. INT 2F - SWELL.EXE - ACTIVATE
  847.     AX = CD03h
  848. Return: AX = 0000h
  849. SeeAlso: AX=CD02h"SWELL"
  850. --------P-2FCD04-----------------------------
  851. INT 2F - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE
  852.     AX = CD04h
  853.     CX:BX -> structure (see #2223)
  854. Return: AL = status (see #2222)
  855. SeeAlso: AX=CD03h"Image"
  856.  
  857. (Table 2222)
  858. Values for IPI function status:
  859.  00h    successful
  860.  80h    unsuccessful
  861.  81h    scan line out of range
  862.  82h    unsupported scan line density
  863.  83h    out of memory
  864.  84h    unrecognized source
  865.  85h    initialization error
  866.  
  867. Format of structure:
  868. Offset    Size    Description    (Table 2223)
  869.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  870.  02h    DWORD    pointer to image data
  871.  06h    WORD    scan line on which to place
  872.  08h    WORD    bit offset from start of scan line at which to place
  873.  0Ah    WORD    density of bitmap data (300, 600, or 1200 dpi)
  874.  0Ch    WORD    width in bits of data
  875.  0Eh    WORD    source logical page number
  876.  10h    WORD    source handle (only if source in expanded memory)
  877.  12h    WORD    source offset (only if source in expanded memory)
  878. --------U-2FCD04-----------------------------
  879. INT 2F - SWELL.EXE - TURN OFF VERBOSE MODE
  880.     AX = CD04h
  881. Return: AX = 0000h
  882. SeeAlso: AX=CD05h"SWELL"
  883. --------P-2FCD05-----------------------------
  884. INT 2F - Intel Image Processing Interface - PRINT PAGE
  885.     AX = CD05h
  886. Return: AL = status (00h,80h) (see #2222)
  887. Note:    page image is retained, so multiple calls will print multiple copies of
  888.       the page
  889. SeeAlso: AX=CD06h"Image"
  890. --------U-2FCD05-----------------------------
  891. INT 2F - SWELL.EXE - TURN ON VERBOSE MODE
  892.     AX = CD05h
  893. Return: AX = 0000h
  894. SeeAlso: AX=CD04h"SWELL"
  895. --------P-2FCD06-----------------------------
  896. INT 2F - Intel Image Processing Interface - CLEAR PAGE
  897.     AX = CD06h
  898. Return: AL = status (00h,80h) (see #2222)
  899. Note:    palette is reset to default
  900. SeeAlso: AX=CD09h"Image"
  901. --------U-2FCD06-----------------------------
  902. INT 2F - SWELL.EXE - UNINSTALL
  903.     AX = CD06h
  904. Return: AX = status
  905.         0000h uninstalled
  906.         8002h programs still swapped, not uninstalled
  907. --------P-2FCD07-----------------------------
  908. INT 2F - Intel Image Processing Interface - reserved
  909.     AX = CD07h
  910. SeeAlso: AX=CD00h"Image"
  911. --------U-2FCD07-----------------------------
  912. INT 2F - SWELL.EXE - GET INFO
  913.     AX = CD07h
  914.     ES:BX -> 32-byte buffer for info (see #2224)
  915. Return: AX = status
  916.         0000h successful
  917.         ES:BX buffer filled
  918.         8001h buffer wrong size
  919.  
  920. Format of SWELL.EXE info buffer:
  921. Offset    Size    Description    (Table 2224)
  922.  00h    WORD    20h  (total size of buffer)
  923.  02h    BYTE    suspend-once mode active if nonzero
  924.  03h    BYTE    00h active, 01h suspended
  925.  04h    BYTE    00h quiet, 01h verbose
  926.  05h    BYTE    "Borland support" (allowing INT 21/AX=4B01h) on if nonzero
  927.  06h 26 BYTEs    unused???
  928. --------P-2FCD08-----------------------------
  929. INT 2F - Intel Image Processing Interface - SCREEN IMAGE
  930.     AX = CD08h
  931.     CX:BX -> structure (see #2225)
  932. Return: AL = status (00h,80h-85h) (see #2222)
  933. SeeAlso: AX=CD05h"Image",AX=CD09h"Image"
  934.  
  935. Format of IPI screen image structure:
  936. Offset    Size    Description    (Table 2225)
  937.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  938.  02h    DWORD    pointer to image data
  939.  06h    WORD    horizontal position on paper of left edge (in 1200 dpi units)
  940.  08h    WORD    vertical position on paper of top edge (in 1200 dpi units)
  941.  0Ah    WORD    left cropping (currently must be zero)
  942.  0Ch    WORD    top cropping (currently must be zero)
  943.  0Eh    WORD    width (currently must be 8000h)
  944.  10h    WORD    height (currently must be 8000h)
  945.  12h    WORD    horizontal size of image in 1200 dpi units
  946.  14h    WORD    vertical size of image in 1200 dpi units
  947.  16h    WORD    aspect ratio (currently reserved)
  948.  18h    WORD    initialization flag (if 01h, initialization is performed)
  949.  1Ah    WORD    pixels per line of source data
  950.  1Ch    WORD    number of scan lines in source data
  951.  1Eh    WORD    number of scan lines in packet
  952.  20h    WORD    bits per pixel (1,2,4,6, or 8)
  953.  22h    WORD    pixels per byte (1,2,4, or 8)
  954.  24h    WORD    compression type (currently only 00h [uncompressed] supported)
  955.  26h    WORD    source page number (if in expanded memory)
  956.  28h    WORD    source handle (if in expanded memory)
  957.  2Ah    WORD    source offset (if in expanded memory)
  958. --------U-2FCD08-----------------------------
  959. INT 2F - SWELL.EXE - UNUSED
  960.     AX = CD08h
  961. Return: AX = FFFFh (error)
  962. --------P-2FCD09-----------------------------
  963. INT 2F - Intel Image Processing Interface - LOAD SCREEN
  964.     AX = CD09h
  965.     CX:BX -> structure (see #2226)
  966. Return: AL = status (00h,80h) (see #2222)
  967. SeeAlso: AX=CD06h"Image Processing",AX=CD0Ah"Image Processing"
  968.  
  969. Format of IPI load screen structure:
  970. Offset    Size    Description    (Table 2226)
  971.  00h    BYTE    style
  972.         44h ('D') diamond style
  973.         4Ch ('L') line style
  974.  01h    BYTE    reserved (00h)
  975.  02h    WORD    frequency in lines per inch [sic]
  976.         currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100
  977.  04h    WORD    screen angle in degrees (-360 to 360)
  978.         currently coerced to nearest of -45, 0, 45, or 90
  979. --------U-2FCD09-----------------------------
  980. INT 2F - SWELL.EXE - TURN OFF "BORLAND SUPPORT"
  981.     AX = CD09h
  982. Return: AX = 0000h
  983. SeeAlso: AX=CD0Ah"SWELL"
  984. --------P-2FCD0A-----------------------------
  985. INT 2F - Intel Image Processing Interface - LOAD PALETTE
  986.     AX = CD0Ah
  987.     CX:BX -> palette structure (see #2227)
  988. Return: AL = status (00h,80h) (see #2222)
  989. SeeAlso: AX=CD09h"Image Processing"
  990.  
  991. Format of IPI palette structure:
  992. Offset    Size    Description    (Table 2227)
  993.  00h    BYTE    bits per pixel for which palette is to be used (1,2,4,6, or 8)
  994.  01h    2**N    palette translation values, one per possible pixel value
  995. --------U-2FCD0A-----------------------------
  996. INT 2F - SWELL.EXE - TURN ON "BORLAND SUPPORT"
  997.     AX = CD0Ah
  998. Return: AX = 0000h
  999. SeeAlso: AX=CD09h"SWELL"
  1000. --------P-2FCD0F-----------------------------
  1001. INT 2F - LaserPort Interface - EXECUTE FUNCTION
  1002.     AX = CD0Fh
  1003.     BL = function
  1004.         01h enable
  1005.         02h disable
  1006.         03h ???
  1007. Return: AL = status
  1008.         00h success
  1009. SeeAlso: AX=CD00h"LaserPort"
  1010. --------K-2FCF00-----------------------------
  1011. INT 2F - TEMPLEXX 1.0 - INSTALLATION CHECK
  1012.     AX = CF00h
  1013. Return: AL = FFh if installed
  1014. Program: TEMPLEXX is a popup keyboard template by Henson Scientific, Inc.
  1015. Note:    values in AL other than 00h cause an immediate return without modifying
  1016.       any registers
  1017. --------G-2FD000-----------------------------
  1018. INT 2F C - MDEBUG display driver - GET DRIVER STATUS
  1019.     AX = D000h
  1020. Return: CF set on error
  1021.         all other registers must be unchanged)
  1022.     CF clear if successful
  1023.         AL = FFh
  1024.         AH = driver semaphor
  1025.         00h driver is not active
  1026.         01h driver is active
  1027.         BX = CS of the driver
  1028.         CX = driver version (CH = major, CL = minor, must be >= 013Ch)
  1029.         DL = buffer semaphor
  1030.         00h driver is not pending
  1031.         01h driver is pending between functions 02h and 03h
  1032.         DH = show semaphor
  1033.         00h driver is not pending
  1034.         01h driver is pending between functions 04h and 05h
  1035. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  1036.       Schemmer, including a memory monitor, an interpreter and a
  1037.       disassembler
  1038. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  1039. Notes:    MDEBUG can use any two consecutive multiplex numbers between C0h and
  1040.       FFh; the default is D0h for the display driver and D1h for the
  1041.       command driver (see INT 60/AH=00h"MDEBUG" for the actual multiplex
  1042.       numbers used)
  1043.     this function MUST be reentrant, as MDEBUG calls it after every popup
  1044.       before any other actions.  The handler should not change any
  1045.       registers if the display is in an unsupported mode or in a mode
  1046.       MDEBUG supports itself, e.g. a normal text mode with at least 80x25
  1047.       characters (i.e. 80x43 or 132x44 (v1.60+)). In this case MDEBUG will
  1048.       not call any of the other functions for this popup session.
  1049.     MDEBUG will not call the other functions if the returned version is
  1050.       less than the actual version of MDEBUG.
  1051.     if the driver is reentrant, DL and DH should be 00h
  1052. SeeAlso: AX=D001h,AX=D002h,AX=D003h,AX=D004h,AX=D005h
  1053. --------M-2FD000-----------------------------
  1054. INT 2F - ZWmous - INSTALLATION CHECK
  1055.     AX = D000h
  1056. Return: AX = 5A57h ("ZW") if installed
  1057.         BX = segment of resident code
  1058. Program: ZWmous is a shareware TSR by Zen Wu which permits the use of a mouse
  1059.       with many non-mouse applications by entering the letter under the
  1060.       mouse cursor on button presses
  1061. SeeAlso: INT 33/AX=0003h
  1062. --------N-2FD000-----------------------------
  1063. INT 2F - Lotus CD/Networker - INSTALLATION CHECK
  1064.     AX = D000h
  1065. Return: AL = FFh if CD/Networker TSR is loaded
  1066.     BX = 4D44h ("MD") signature
  1067.     CX = Windows mode word (from INT 2F/AX=1600h) at time of TSR load
  1068.     DX = bitmap identifying all loaded CD/Networker TSRs.
  1069. Notes:    INT 2F/AH=D0h is used by CD/Networker to communicate between a
  1070.       resident redirector TSR and a transient program that controls the
  1071.       TSR's CD-ROM drive emulation (volume attachments, caching, etc).
  1072.     At present there is only one CD/Networker TSR; the bitmap always = 4.
  1073. SeeAlso: AX=D002h"Lotus",INT 2F/AX=1500h"CD-ROM"
  1074. --------G-2FD001-----------------------------
  1075. INT 2F C - MDEBUG display driver - INITIALIZE DRIVER
  1076.     AX = D001h
  1077. Return: CF set on error
  1078.     AL = driver semaphor
  1079.     AH = buffer semaphor
  1080. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  1081. Notes:    MDEBUG calls this function after every successful call of the function
  1082.       00h. The function should reset all internal data and the status of
  1083.       the driver. If this function returns an error, MDEBUG will not call
  1084.       the other functions in this popup session.
  1085.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1086.       FFh; the default is D0h for the display driver and D1h for the
  1087.       command driver
  1088. SeeAlso: AX=D000h
  1089. --------G-2FD002-----------------------------
  1090. INT 2F C - MDEBUG display driver - SAVE GRAPHIC DATA
  1091.     AX = D002h
  1092. Return: CF set on error
  1093.     CF clear if successful
  1094.         display memory saved and display switched to one of the text modes
  1095.           02h, 03h or 07h.
  1096. Note:    MDEBUG calls this function only once every popup session before
  1097.       displaying its windows.
  1098. SeeAlso: AX=D000h,AX=D003h
  1099. --------N-2FD002BX4D44-----------------------
  1100. INT 2F - Multiplex - Lotus CD/Networker GET DATA AREA
  1101.     AX = D002h
  1102.     BX = 4D44h
  1103.     DX = bitmap identifying one loaded CD/Networker TSR
  1104. Return: ES:DI -> data area owned by TSR
  1105. Note:    the format of the data area changes with each minor revision, so it
  1106.       cannot be counted on
  1107. SeeAlso: AX=D000h"Lotus"
  1108. --------G-2FD003-----------------------------
  1109. INT 2F C - MDEBUG display driver - RESTORE GRAPHIC DATA
  1110.     AX = D003h
  1111. Return: CF set on error
  1112.     CF clear if successful
  1113.         display restored to the mode it was in before calling AX=D002h and
  1114.           the display memory is restored
  1115. Note:    MDEBUG calls this function only once every popup session just before
  1116.      it exits to normal DOS.
  1117. SeeAlso: AX=D000h,AX=D002h
  1118. --------G-2FD004-----------------------------
  1119. INT 2F - MDEBUG display driver - SHOW SAVED DATA
  1120.     AX = D004h
  1121. Return: CF set on error
  1122.     CF clear if successful
  1123.         display switched to mode it was in before calling AX=D002h and the
  1124.           display memory is restored
  1125. Note:    This function needn't save the display memory before changing it.
  1126. SeeAlso: AX=D000h,AX=D005h
  1127. --------G-2FD005-----------------------------
  1128. INT 2F - MDEBUG display driver - SWITCH BACK TO TEXT SCREEN
  1129.     AX = D005h
  1130. Return: CF set on error
  1131.     CF clear if successful
  1132.         display restored to mode it was in before calling AX=D004h
  1133. Note:    This function needn't save or change the display memory
  1134. SeeAlso: AX=D000h,AX=D004h
  1135. --------G-2FD0-------------------------------
  1136. INT 2F - MDEBUG display driver - RESERVED FUNCTION NUMBERS
  1137.     AH = D0h
  1138.     AL = 06h-7Fh
  1139. Note:    these functions are reserved for future use
  1140. --------G-2FD0-------------------------------
  1141. INT 2F - MDEBUG display driver - USER DEFINED FUNCTION NUMBERS
  1142.     AH = D0h
  1143.     AL = 80h-FFh
  1144. Note:    these functions numbers are reserved for user defined features (e.g.
  1145.       communication between the transient und resident parts of the driver)
  1146. --------G-2FD100-----------------------------
  1147. INT 2F C - MDEBUG command driver - GET STATUS
  1148.     AX = D100h
  1149.     BX = version of MDEBUG (BH = major, BL = minor)
  1150.     CX = command driver counter
  1151. ---v1.60+---
  1152.     DS:SI -> MDEBUG identification table (see #2228)
  1153.     ES = segment of display memory used by MDEBUG
  1154.     DI = size of video mode used by MDEBUG
  1155.         (high byte = lines, low byte = columns)
  1156. Return: DL = FFh
  1157.     BX = version number of the driver if it is less than the version in BX,
  1158.           else unchanged
  1159.     CX incremented
  1160. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  1161.       Schemmer, including a memory monitor, an interpreter, and a
  1162.       disassembler
  1163. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  1164. Notes:    called by MDEBUG at start of popup session; if the version number
  1165.       returned in BX is less than 1.52 (1.60 for MDEBUG v1.70), MDEBUG will
  1166.       not call any of the other functions during this popup session
  1167.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1168.       FFh; the default is D0h for the display driver and D1h for the
  1169.       command driver (see INT 60/AH=00h"MDEBUG" for the multiplex numbers
  1170.       actually used)
  1171.     this function must end with a far call to the old INT 2F handler after
  1172.       changing the registers
  1173.     this function MUST be reentrant
  1174.     command drivers must also declare the following data at the given
  1175.       offsets in the code segment
  1176.         100h  3 BYTEs    JMP-command in .COM-files
  1177.         103h    BYTE    NOP-command (90h)
  1178.         104h 26 BYTEs    signature "Kommandotreiber für MDEBUG"
  1179.         11Eh 12 BYTEs    name of driver, e.g. "MDHISDRV.COM"
  1180.                 each driver must have a unique name
  1181.     MDEBUG will pass every key and command to the command driver(s) before
  1182.       checking for a valid internal command
  1183. SeeAlso: AX=D000h,AX=D101h
  1184.  
  1185. Format of MDEBUG identification table:
  1186. Offset    Size    Description    (Table 2228)
  1187.  -2    WORD    entry offset
  1188.  00h    WORD    CS of MDEBUG
  1189.  02h    DWORD    old INT 08h vector
  1190.  06h    DWORD    old INT 09h vector
  1191.  0Ah    DWORD    address INT 16h routine used by MDEBUG
  1192.  0Eh    BYTE    length of version string
  1193.  0Fh  N BYTEs    version string
  1194. --------G-2FD101-----------------------------
  1195. INT 2F - MDEBUG command driver - INITIALIZE DRIVER
  1196.     AX = D101h
  1197.     CX = command driver counter
  1198. Return: DL = status
  1199.         FFh if successful
  1200.         CX incremented
  1201.         else error: all registers unchanged
  1202. Note:    this function must end with a  far call to the old INT 2F handler after
  1203.       changing the registers
  1204.     this function must be reentrant
  1205. --------G-2FD102-----------------------------
  1206. INT 2F - MDEBUG command driver - EXECUTE INTERPRETER COMMAND
  1207.     AX = D102h
  1208.     BL = first character of the interpreter command
  1209.     BH = last character of the interpreter command (or blank)
  1210.     DS:SI -> parameter for the interpreter command as ASCIZ string
  1211.     DS:DI -> MDEBUG data structure (see #2230)
  1212. Return: AL = FFh
  1213.     CF set on error
  1214.         AH = error number (see #2229)
  1215.         DS:SI -> ASCIZ error message (max 30 characters) if AH=0Ch
  1216.     CF clear if successful
  1217.         AH = return code
  1218.         00h continue processing the command line
  1219.         01h leave MDEBUG popup session
  1220.         02h leave MDEBUG popup session and automatically popup again
  1221.               if the InDOS flag is zero
  1222.         03h not used (same as 00h)
  1223.         04h not used (same as 00h)
  1224.         05h put new command line into the input buffer,
  1225.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  1226.         06h process new command line
  1227.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  1228.            else unknown status, but continue processing commmand line
  1229. Note:    this function must end with a far call to the old INT 2F handler (with
  1230.       registers unchanged) if the driver does not support the interpreter
  1231.       command in BX.  Otherwise, the driver must not chain to the old
  1232.       INT 2F.
  1233.  
  1234. (Table 2229)
  1235. Values for MDEBUG error number:
  1236.  01h    syntax error
  1237.  02h    first shell of the command.com is activ
  1238.  03h    Esc pressed
  1239.  04h    break pressed
  1240.  05h    DOS is busy
  1241.  06h    command ended
  1242.  07h    division by zero
  1243.  08h    invalid display driver
  1244.  09h    invalid command driver
  1245.  0Ah    error 8 and 9
  1246.  0Bh    unknown error
  1247.  0Ch    new error
  1248.  else    unknown error
  1249.  
  1250. Format of MDEBUG data structure:
  1251. Offset    Size    Description    (Table 2230)
  1252.  00h    WORD    register SE
  1253.  02h    WORD    register OF
  1254.  04h    WORD    register FS
  1255.  06h    WORD    register FO
  1256.  08h    WORD    register AX
  1257.  0Ah    WORD    register BX
  1258.  0Ch    WORD    register CX
  1259.  0Eh    WORD    register DX
  1260.  10h    WORD    register SI
  1261.  12h    WORD    register DI
  1262.  14h    WORD    register DS
  1263.  16h    WORD    register ES
  1264.  18h    WORD    register BP
  1265.  1Ah    WORD    register SS
  1266.  1Ch    WORD    register SP
  1267.  1Eh    WORD    register FL (flags)
  1268.  20h    WORD    register R0
  1269.  22h    WORD    register R1
  1270.  24h    WORD    register R2
  1271.  26h    WORD    register R3
  1272.  28h    WORD    register R4
  1273.  2Ah    WORD    register R5
  1274.  2Ch    WORD    register R6
  1275.  2Eh    WORD    register R7
  1276.  30h    WORD    register R8
  1277.  32h    WORD    register CS, return-address
  1278.  34h    WORD    register IP, return-address
  1279.  36h    DWORD    saved pointer to data for key <F6> (v1.60)
  1280.         saved monitor address (v1.70)
  1281.  3Ah 12 WORDs    saved register values on last popup entry (for <F8> key)
  1282.         (original register values at popup entry of MDEBUG)
  1283.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  1284.  52h 12 WORDs    saved register values on last popup exit (for <SHIFT-F8> key)
  1285.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  1286.  6Ah    DWORD    address of the DOS-invars-table
  1287.  6Eh    DWORD    address of the InDOS flag
  1288.  72h    WORD    offset of the register which is used for the segment of the
  1289.           first monitor window
  1290.  74h    WORD    offset of the register which is used for the offset of the
  1291.           first monitor window
  1292.  76h    WORD    name of the register which is used for the segment of the
  1293.           first monitor segment
  1294.  78h    WORD    name of the register which is used for the offset of the first
  1295.           monitor window
  1296.  7Ah    WORD    pseudo register 1
  1297.  7Ch    WORD    pseudo register 2
  1298. --------G-2FD103-----------------------------
  1299. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE MONITOR
  1300.     AX = D103h
  1301.     BX = key code (like result of an interrupt 16h call)
  1302.     CX = cursor position
  1303.         0000h in the ASCII column of the monitor
  1304.         0001h in one of the hex fields of the monitor
  1305.     DS:SI -> MDEBUG data structure (see #2230)
  1306.     ES:DI -> actual byte in the monitor
  1307. Return: AL = FFh
  1308.     AH = return code
  1309.         00h key processed, read next key
  1310.         01h leave MDEBUG popup session
  1311.         02h leave MDEBUG popup session and automatically popup again if DOS
  1312.           is not busy
  1313.         03h signal an error (beep)
  1314.         04h driver has redefined the key, proceed with the new key
  1315.         BX = new key code
  1316.         MDEBUG will not pass the new key to the command driver(s)
  1317.        else treat like code 00h
  1318. Note:    this function must end with a far call to the old INT 2F handler (with
  1319.       registers unchanged) if the driver does not support the key in BX.
  1320.       Otherwise, the driver must not chain to the old INT 2F.
  1321. SeeAlso: AX=D104h
  1322. --------G-2FD104-----------------------------
  1323. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE INTERPRETER
  1324.     AX = D104h
  1325.     DS:SI -> MDEBUG data structure (see #2230)
  1326. Return: AL = FFh
  1327.     AH = return code
  1328.         00h key processed, read next key
  1329.         01h leave MDEBUG popup session
  1330.         02h leave MDEBUG popup session and automactically popup again if
  1331.           DOS is not busy
  1332.         03h signal an error (beep)
  1333.         04h driver has redefined the key, proceed with the new key
  1334.         BX = new key code
  1335.         MDEBUG won't pass the new key to the command driver(s)
  1336.         05h put new command line into the input buffer
  1337.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  1338.         06h process new command line
  1339.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  1340.        else treat like code 00h
  1341. Note:    this function must end with a far call to the old INT 2F handler if the
  1342.       driver does not support the key in BX.  Otherwise, the driver must
  1343.       not chain to the old INT 2F.
  1344. SeeAlso: AX=D103h
  1345. --------G-2FD1-------------------------------
  1346. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  1347.     AH = D1h
  1348.     AL = 05h-0Ah
  1349. Note:    these functions are reserved for future use
  1350. --------G-2FD110-----------------------------
  1351. INT 2F - MDEBUG command driver - GET ADDRESS OF THE OLD INT 2F
  1352.     AX = D110h
  1353. Return: DL = FFh
  1354.     ES:BX -> next program in the chain for INT 2F
  1355.     CX = code segment of this driver
  1356.     DI = offset of driver identification table (see #2231) (v1.60+)
  1357. Notes:    only called by the transient part of the driver
  1358.     must be reentrant and the driver must not chain this function to the
  1359.       old INT 2F
  1360.  
  1361. Format of the MDEBUG driver identification table:
  1362. Offset    Size    Description    (Table 2231)
  1363.  00h  26 BYTEs     signature "Kommandotreiber für MDEBUG"
  1364.                          ^- Note: ASCII 129,German U-umlaut
  1365.  27h  12 BYTEs     name of driver, e.g. "MDHISDRV.COM"
  1366.          each driver must have a unique name
  1367. --------G-2FD111-----------------------------
  1368. INT 2F - MDEBUG command driver - START DRIVER
  1369.     AX = D111h
  1370. Return: DL = FFh
  1371. Notes:    only called by the transient part of the driver to inform the resident
  1372.       part that it is installed
  1373.     the function must be reentrant and the driver mustn't chain this
  1374.       function to the old INT 2F
  1375. SeeAlso: AX=D101h,AX=D112h
  1376. --------G-2FD112-----------------------------
  1377. INT 2F - MDEBUG command driver - END DRIVER
  1378.     AX = D112h
  1379. Return: DL = FFh
  1380. Notes:    only called by the transient part of the driver to inform the resident
  1381.       part that it will be released after this function
  1382.     the function must be reentrant and the driver mustn't chain this
  1383.       function to the old INT 2F
  1384. SeeAlso: AX=D101h,AX=D111h
  1385. --------G-2FD1-------------------------------
  1386. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  1387.     AH = D1h
  1388.     AL = 13h-7Fh
  1389. Note:    these functions are reserved for future use
  1390. --------G-2FD1-------------------------------
  1391. INT 2F - MDEBUG command driver - USER DEFINED FUNCTIONS
  1392.     AH = D1h
  1393.     AL = 80h-FFh
  1394. Note:    these functions are reserved for user defined features (e.g.
  1395.       communication between the transient und resident parts of the driver)
  1396. --------U-2FD200-----------------------------
  1397. INT 2F - PCL-838.EXE - INSTALLATION CHECK
  1398.     AX = D200h
  1399. Return: AL = FFh if installed??? (documented as AX = return value)
  1400. Program: PCL-838 is a resident utility for controlling a stepmotor adapter
  1401.       board by Advantec
  1402. SeeAlso: AX=D201h"PCL-838",AX=D202h"PCL-838"
  1403. --------Q-2FD200BX5144-----------------------
  1404. INT 2F - Quarterdeck RPCI - INSTALLATION CHECK
  1405.     AX = D200h
  1406.     BX = 5144h ("QD")
  1407.     CX = 4D45h ("ME")
  1408.     DX = 4D30h ("M0")
  1409. Return: AL = FFh installed
  1410.     if BX,CX,DX registers were as specified on entry:
  1411.         BX = 4D45h ("ME")
  1412.         CX = 4D44h ("MD")
  1413.         DX = 5652h ("VR")
  1414. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1415. Notes:    the Quarterdeck RPCI (Resident Program Communication Interface) is
  1416.       supported by QEMM v5.0+, QRAM, MANIFEST, VIDRAM, etc.
  1417.     for AL <> 0, if the BX/CX/DX values don't match the identifier of a
  1418.       Quarterdeck product, it just chains to the previous INT 2F handler
  1419. SeeAlso: AX=D201h/BX=4849h,AX=D201h/BX=4D41h,AX=D201h/BX=4D45h
  1420. SeeAlso: AX=D201h/BX=5145h,AX=D201h/BX=5649h
  1421. --------U-2FD201-----------------------------
  1422. INT 2F - PCL-838.EXE - UNINSTALL
  1423.     AX = D201h
  1424. Return: AX = return value
  1425. SeeAlso: AX=D200h"PCL-838",AX=D202h"PCL-838"
  1426. --------m-2FD201BX4849-----------------------
  1427. INT 2F - Quarterdeck RPCI - GET QD HIMEM PRESENCE
  1428.     AX = D201h
  1429.     BX = 4849h ("HI")
  1430.     CX = 4D45h ("ME")
  1431.     DX = 4D51h ("MQ")
  1432. Return: BX = 4F4Bh ("OK")
  1433.     ES:DI -> HIMEM entry point
  1434. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1435. SeeAlso: AX=D200h,AX=D201h/BX=5145h
  1436. --------m-2FD201BX4849-----------------------
  1437. INT 2F - Quarterdeck RPCI - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN
  1438.     AX = D201h
  1439.     BX = 4849h ("HI")
  1440.     CX = 5241h ("RA")
  1441.     DX = 4D30h ("M0")
  1442. Return: BX = 4F4Bh ("OK")
  1443.     CX = segment of start of HIRAM chain
  1444.     DX = reserved block owner (QEMM/QRAM code segment)
  1445. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1446. Note:    the HIRAM memory chain has the same format as the regular DOS 4.0
  1447.       memory chain (see #0915 at INT 21/AH=52h), except that XMS Upper
  1448.       Memory Blocks have the block header program name field set to
  1449.       "UMB"; blocks whose "owner" field is set to the reserved segment
  1450.       returned in DX are locked-out regions such as video memory and ROMs.
  1451. SeeAlso: AX=12FFh/BX=0006h,AX=D200h
  1452. --------G-2FD201BX4D41-----------------------
  1453. INT 2F U - Quarterdeck RPCI - MANIFEST v1.0+ - INSTALLATION CHECK
  1454.     AX = D201h
  1455.     BX = 4D41h ("MA")
  1456.     CX = 4E49h ("NI")
  1457.     DX = 4645h ("FE")
  1458. Return: BX = 5354h ("ST") if installed
  1459. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1460. SeeAlso: AX=D200h
  1461. --------E-2FD201BX4D45-----------------------
  1462. INT 2F U - Quarterdeck RPCI - DVDOS4GX.DVR - ???
  1463.     AX = D201h
  1464.     BX = 4D45h ("ME")
  1465.     CX = 5155h ("QU")
  1466.     DX = 5044h ("PD")
  1467. Return: AL = FFh
  1468.     BX = 4F4Bh ("OK")
  1469. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1470. Note:    this function is called by QEMM 6.03
  1471.     performs a variety of actions before setting return registers
  1472. SeeAlso: AX=D200h
  1473. --------m-2FD201BX5145-----------------------
  1474. INT 2F - Quarterdeck RPCI - QEMM v5.0+ - INSTALLATION CHECK
  1475.     AX = D201h
  1476.     BX = 5145h ("QE")
  1477.     CX = 4D4Dh ("MM")
  1478.     DX = 3432h ("42")
  1479. Return: BX = 4F4Bh ("OK")
  1480.     ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
  1481. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1482. Note:    this call is not available under QEMM v6.00 unless Windows3 support
  1483.       has been disabled with the NW3 switch to QEMM386.SYS
  1484. SeeAlso: AX=D200h,AX=D201h/BX=4849h,INT 67/AH=3Fh
  1485. --------V-2FD201BX5649-----------------------
  1486. INT 2F u - Quarterdeck RPCI - VIDRAM v5.0+ - INSTALLATION CHECK
  1487.     AX = D201h
  1488.     BX = 5649h ("VI")
  1489.     CX = 4452h ("DR")
  1490.     DX = 414Dh ("AM")
  1491. Return: BX = 4F4Bh ("OK")
  1492.     ES:DI -> VIDRAM entry point (see #2232)
  1493. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1494. SeeAlso: AX=D200h
  1495.  
  1496. (Table 2232)
  1497. Call VIDRAM entry point with:
  1498.     AH = 00h get status
  1499.         Return: AL = VIDRAM state (see #2233)
  1500.             BL = extra RAM status (see #2234)
  1501.             BH = feature flags (see #2235)
  1502.             CL = current monitor (01h = mono, 80h = color)
  1503.             SI = current top of memory (paragraph)
  1504.             DI = segment of start of HiRAM chain
  1505.     AH = 01h setup
  1506.         AL = VIDRAM state (see #2233)
  1507.         BL = extra RAM status (see #2234)
  1508.         BH = feature flags (see #2235)
  1509.         CL = monitor (01h = monochrome, 80h = color)
  1510.         SI = new top of memory (paragraph)
  1511.         DI = segment of start of HiRAM chain
  1512.     AH = 02h get end address of VIDRAM code
  1513.         Return: ES:DI -> VIDRAM partial map context (see #2236,#2237)
  1514. Return: CF set on error
  1515.     CF clear if successful
  1516.  
  1517. (Table 2233)
  1518. Values for VIDRAM state:
  1519.  00h    off
  1520.  01h    no EGA graphics
  1521.  02h    no graphics at all
  1522.  
  1523. (Table 2234)
  1524. Values for VIDRAM extra RAM status:
  1525.  00h    VIDRAM does not use extra RAM
  1526.  01h    VIDRAM uses EMS as extra RAM
  1527.  02h    VIDRAM uses EGA as extra RAM
  1528.  
  1529. Bitfields for VIDRAM feature flags:
  1530. Bit(s)    Description    (Table 2235)
  1531.  0    override enabled
  1532.  1    mapped memory detected in A000h-B000h range
  1533.  2    top of memory not at 640K
  1534.  3    MDA detected
  1535.  4    high RAM exists in video area
  1536.  5    mapped memory detected in video area
  1537.  6-7    reserved???
  1538.  
  1539. Format of VIDRAM partial map context (EMS 3.2):
  1540. Offset    Size    Description    (Table 2236)
  1541.  00h    BYTE    EMS version ID (32h)
  1542.  01h    WORD    EMM handle for this entry
  1543.  03h    BYTE    number of frames
  1544.  04h    BYTE    first page frame
  1545.  05h    WORD    offset from ES to previously saved map
  1546.  
  1547. Format of VIDRAM partial map context (EMS 4.0):
  1548. Offset    Size    Description    (Table 2237)
  1549.  00h    BYTE    EMS version ID (40h)
  1550.  01h    WORD    mappable segment count
  1551.  03h  N WORD    mappable segments
  1552.     WORD    offset to previously saved map???
  1553. --------U-2FD202-----------------------------
  1554. INT 2F - PCL-838.EXE - EXECUTE PCL838 COMMANDS
  1555.     AX = D202h
  1556.     CX:BX -> parameter table
  1557. Return: AX = return value
  1558. SeeAlso: AX=D200h"PCL-838",AX=D201h"PCL-838"
  1559. --------R-2FD300BX4562-----------------------
  1560. INT 2F U - TeleReplica - INSTALLATION CHECK
  1561.     AX = D300h
  1562.     BX = 4562h
  1563.     CX = 2745h
  1564.     DX = serial port I/O base address??? (03F8h for v3.9)
  1565. Return: SI = segment of resident code
  1566.     AX = 251Dh
  1567.     BX = DF21h
  1568.     CX = F321h
  1569.     DX = ???
  1570. --------R-2FD3CB-----------------------------
  1571. INT 2F U - LapLink Quick Connect v6 - API
  1572.     AX = D3CBh
  1573.     CX = function
  1574.         0002h get ???
  1575.         Return: BX:AX -> ???
  1576.             CL = ???
  1577.             CH = ???
  1578.             DX = ???
  1579.             DI = COM1 I/O port???
  1580.             SI = COM2 I/O port???
  1581.         0003h initialization???
  1582.         0004h ???
  1583.         0005h initialization???
  1584.         0006h reset/clear ???
  1585.         Return: AX = 0000h
  1586.             ES:DI -> next byte after ??? cleared by this call
  1587.         0007h initialization???
  1588.         0008h uninstall
  1589.         Return: BX = status
  1590.                 0000h successful
  1591.                 FFFFh incomplete, stub remains in memory
  1592. Return: CX = 534Bh (except function 0002h)
  1593. Index:    uninstall;LapLink Quick Connect
  1594. --------l-2FD44D-----------------------------
  1595. INT 2F - 4DOS.COM v2.1+ - API
  1596.     AX = D44Dh
  1597.     BH = function
  1598.         00h installation check
  1599.         Return: AX = 44DDh
  1600.             BL = major version number
  1601.             BH = minor version number
  1602.             CX = PSP segment address for current invocation
  1603.             DL = 4DOS shell number (0 for the first (root) shell,
  1604.                   updated each time a new copy is loaded)
  1605.         01h (internal, v2.1-3.03) terminate current copy of 4DOS
  1606.         Return: nothing
  1607.         (internal, v4.0) ???
  1608.         Return: AX = 44DDh
  1609.             ES:BX -> data area (see #2238)
  1610.         02h ???
  1611.         DX = ???
  1612.     ---v2.1-3.03 only---
  1613.         03h EXEC program
  1614.         CX:DX -> EXEC record (see #2239)
  1615.         FEh deallocate shell number (passed through to root shell)
  1616.         ???
  1617.         FFh allocate shell number (passed through to root shell)
  1618. Note:    bug in v3.00 will crash system if unrecognized value in BH
  1619. SeeAlso: AX=D44Eh,AX=E44Dh,INT 21/AX=4403h
  1620. Index:    installation check;4DOS|installation check;NDOS
  1621.  
  1622. Format of 4DOS v4.0 data area:
  1623. Offset    Size    Description    (Table 2238)
  1624.  00h  2 BYTEs    ???
  1625.  06h    WORD    XMS handle for swapping
  1626.     ???
  1627.  
  1628. Format of 4DOS EXEC record:
  1629. Offset    Size    Description    (Table 2239)
  1630.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  1631.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  1632.  04h    WORD    segment of environment for child process (see INT 21/AH=26h)
  1633. --------l-2FD44E-----------------------------
  1634. INT 2F C - 4DOS v3.0+ - AWAITING USER INPUT
  1635.     AX = D44Eh
  1636. ---4DOS v3.01+---
  1637.     BX = condition
  1638.         0000h 4DOS is ready to display prompt
  1639.         0001h 4DOS has displayed the prompt, about to accept user input
  1640. Return: the handler must preserve SI, DI, BP, SP, DS, ES, and SS
  1641. Note:    v3.00 only makes the call corresponding to BX=0001h, does not set BX
  1642. SeeAlso: AX=D44Dh
  1643. --------K-2FD44FBX0000-----------------------
  1644. INT 2F - 4DOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  1645.     AX = D44Fh
  1646.     BX = 0000h
  1647. Return: AX = 44DDh if installed
  1648. Note:    this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  1649.       which emulate the 4DOS and NDOS keystack
  1650. SeeAlso: AX=D44Fh/BX=0001h,AX=E44Fh/BX=0000h
  1651. --------K-2FD44FBX0001-----------------------
  1652. INT 2F - 4DOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  1653.     AX = D44Fh
  1654.     BX = 0001h
  1655.     CX = number of keystrokes (01h-FFh)
  1656.     DS:DX -> keystroke list (one word per keystroke)
  1657. Return: AX = status
  1658.         0000h successful
  1659.         nonzero failed
  1660.     BX,CX,DX destroyed
  1661. Notes:    the keystrokes are the exact values to return from subsequent calls to
  1662.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  1663.         0000h causes subfunctions 01h and 11h to indicate an empty
  1664.               keyboard buffer
  1665.         FFFFh is followed by a word indicating the number of clock
  1666.               ticks to delay before the next faked keystroke
  1667.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  1668.       invocation, and does not range-check CX; it will overwrite memory
  1669.       following the resident portion if CX is greater than 100h.
  1670.     this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  1671.       which emulate the 4DOS and NDOS keystack
  1672. SeeAlso: AX=D44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h
  1673. --------G-2FD600-----------------------------
  1674. INT 2F - HEART.COM - INSTALLATION CHECK
  1675.     AX = D600h
  1676. Return: AX = 0303h (two hearts) if installed
  1677.         ES:DI -> buffer (see #2240)
  1678. Program: HEART.COM is a CPU lock-up/critical indicator utility by Mitch Davis.
  1679. Notes:    Once the host program has identified the address of the data area, it
  1680.       can change this to indicate safe/critical, alternate colours, etc.
  1681.     The entries for the color table are in char/attrib form.  Every two
  1682.       entries form a pair which is alternated between 68 times a minute.
  1683.       The first half of the table is for color videos, the second mono.
  1684.       Within each half, the first half is for the safe chars, and the
  1685.       second for the critical chars.
  1686.  
  1687. Format of HEART.COM buffer:
  1688. Offset    Size    Description    (Table 2240)
  1689.  00h  8 WORDs    table of colors/attributes (see notes above)
  1690.  10h    BYTE    flags
  1691.         bit 0: program is in critical section, so flash double
  1692.               exclamation mark
  1693.         bit 1: program is in safe code, so flash the heart character
  1694.  11h    WORD    position of heartbeat on screen, normally 009Eh (last column
  1695.         of second line)
  1696. --------T-2FD600-----------------------------
  1697. INT 2F U - VEDIT VSWAP - INSTALLATION CHECK
  1698.     AX = D600h
  1699. Return: AL = D6h if installed
  1700. Program: VSWAP is the resident portion of VEDIT's "swapper" capability; VEDIT
  1701.       is a programmer's text editor by Greenview Data.
  1702. SeeAlso: AX=D601h,AX=D602h
  1703. --------T-2FD601-----------------------------
  1704. INT 2F U - VEDIT VSWAP - ???
  1705.     AX = D601h
  1706.     BL = subfunction number???
  1707. Return: BL = return code ???
  1708.     ES = resident portion's data??? segment
  1709.     DX = resident portion's code segment
  1710. SeeAlso: AX=D600h"VSWAP"
  1711. --------T-2FD602-----------------------------
  1712. INT 2F U - VEDIT VSWAP - EXEC PROGRAM WITH SWAP
  1713.     AX = D602h
  1714.     other registers set as for INT 21/AX=4B00h
  1715. Return: CF set on error
  1716.         AL = error code
  1717.         82h = failure due to ???
  1718.     CF clear on success
  1719. SeeAlso: AX=D600h"VSWAP",INT 21/AH=4Bh"EXEC"
  1720. --------N-2FD701BX0000-----------------------
  1721. INT 2F - Banyan VINES v4+ - GET BANV INTERRUPT NUMBER
  1722.     AX = D701h
  1723.     BX = 0000h
  1724. Return: AX = 0000h if installed
  1725.         BX = interrupt number (60h to 66h)
  1726.        nonzero not present
  1727. Note:    if AX is nonzero, VINES 3.x or earlier may be installed, thus it is
  1728.       necessary to examine the four bytes preceding the handlers for
  1729.       INT 60 through INT 66 for the string "BANV"
  1730. SeeAlso: AX=D702h,AX=D703h,AX=D704h
  1731. --------N-2FD702-----------------------------
  1732. INT 2F U - Banyan VINES v4+ - PCPRINT interface
  1733.     AX = D702h
  1734.     BX = function
  1735.     ???
  1736. Return: ???
  1737. SeeAlso: AX=D701h,AX=D703h,INT 61/AX=0005h"Banyan"
  1738. --------N-2FD703-----------------------------
  1739. INT 2F U - Banyan VINES v4+ - MAIL interface
  1740.     AX = D703h
  1741.     BX = function
  1742.     ???
  1743. Return: ???
  1744. SeeAlso: AX=D702h,AX=D704h
  1745. --------N-2FD704-----------------------------
  1746. INT 2F U - Banyan VINES v4+ - Streettalk Directory Assistance interface
  1747.     AX = D704h
  1748.     BX = function
  1749.     ???
  1750. Return: ???
  1751. SeeAlso: AX=D703h,INT 61/AX=0007h/BX=0002h"Banyan",INT 61/AX=0007h/BX=0008h
  1752. --------N-2FD800-----------------------------
  1753. INT 2F U - Novell NetWare Lite - CLIENT.EXE - INSTALLATION CHECK
  1754.     AX = D800h
  1755. Return: AL = FFh if installed
  1756.         DX = version number (0100h for v1.0, 0101h for v1.1)
  1757.         BX = data segment of resident copy
  1758.         ES:DI -> private API entry point (see #2241)
  1759.         SI = segment of resident code
  1760. SeeAlso: AX=7A00h,AX=D880h
  1761.  
  1762. (Table 2241)
  1763. Call CLIENT API entry point with:
  1764.     BX = function
  1765.         0000h get ???
  1766.         Return: DX = CLIENT version??? (0101h for v1.1)
  1767.             ES:BX -> ??? data
  1768.         0001h ???
  1769.         0002h ???
  1770.         0003h ???
  1771.         0004h ???
  1772.         0005h ???
  1773.         DL = ???
  1774.         ???
  1775.         Return: ???
  1776.         0006h get module name???
  1777.         ES:DI -> 16-byte buffer
  1778.         Return: CX = ???
  1779.             ES:DI filled with "NWLITE_CLIENT" 00h 00h 00h
  1780.         0007h ???
  1781.         DX:CX = ???
  1782.         ???
  1783.         Return: ???
  1784.         0008h ???
  1785.         0009h ???
  1786.         DL = ???
  1787.         ES:DI -> 16-byte buffer for ???
  1788.         Return: CF clear if successful
  1789.                 AX = 0000h
  1790.                 CX = 0000h
  1791.                 SI,DI destroyed
  1792.             CF set on error
  1793.                 AX = error code 4903h
  1794.         000Ah ???
  1795.         AH = subfunction
  1796.             00h get ???
  1797.             01h clear/set ??? flag
  1798.             AL = new state (00h cleared, 01h set)
  1799.             02h set ???
  1800.             DX = new value of ???
  1801.         Return: DX = old value of ???
  1802.         000Bh ???
  1803.         AX = ???
  1804.         ???
  1805.         Return: ???
  1806.         000Ch ???
  1807.         AX = ???
  1808.         ???
  1809.         Return: ???
  1810.         000Dh ???
  1811.         AX = ???
  1812.         ???
  1813.         Return: ???
  1814.         000Eh get original INT 17
  1815.         Return: CF clear
  1816.             ES:BX -> original INT 17
  1817.         000Fh ???
  1818.         0010h ???
  1819.         AX = ???
  1820.         ???
  1821.         Return: ???
  1822.         0011h get ???
  1823.         Return: CF clear
  1824.             DL = ???
  1825.         0012h get ???
  1826.         AL = index of ???
  1827.         ES:DI -> 10-byte buffer for ???
  1828.         Return: CF clear if successful
  1829.                 ES:DI buffer filled
  1830.                 AX,CX destroyed
  1831.             CF set on error
  1832.                 AX = error code (4907h if AL out of range)
  1833.         0013h get ???
  1834.         Return: CF clear
  1835.             DH = ???
  1836.             DL = ???
  1837.         0014h ???
  1838.         DL = ???
  1839.         ???
  1840.         Return: CF clear if successful
  1841.                 ???
  1842.             CF set on error
  1843.                 AX = error code 8056h
  1844.         0015h ???
  1845.         DX = ???
  1846.         Return: ES:DI -> ???
  1847.         other
  1848.         Return: CF set
  1849.             AX = 0001h (invalid function)
  1850. --------N-2FD856-----------------------------
  1851. INT 2F U - Novell NetWare Lite v1.1 - SERVER - GET ???
  1852.     AX = D856h
  1853. Return: AX = 0001h if supported???
  1854.     BX = ??? (0004h for v1.1)
  1855.     CX = ??? (0F20h for v1.1)
  1856.     DS = segment of resident code
  1857.     ES = data segment of resident copy
  1858. Note:    this function is also supported by Personal NetWare SERVER, bundled
  1859.       with Novell DOS 7
  1860. --------N-2FD880-----------------------------
  1861. INT 2F U - Novell NetWare Lite v1.0+ - SERVER - INSTALLATION CHECK
  1862.     AX = D880h
  1863. Return: AL = FFh if installed
  1864.         DX = version number (0100h for v1.0, 0101h for v1.1)
  1865.         BX = data segment of resident copy
  1866.         CL = current state (00h SERVER is disabled, 01h SERVER is active)
  1867.         ES:DI -> private API entry point (see #2242)
  1868.         SI = ??? (offset of configuration info?)
  1869. Note:    this function is also supported by Personal NetWare SERVER, but DI is
  1870.       not set; instead, ES:SI points at the API entry point
  1871. SeeAlso: AX=7A00h,AX=D800h,INT 2A/AX=D852h
  1872.  
  1873. (Table 2242)
  1874. Call SERVER API entry point with:
  1875.     BX = function
  1876.         0000h ???
  1877.         ???
  1878.         Return: ???
  1879.         Note: closes open files by calling INT 21/AH=3Eh
  1880.         0001h get connection information
  1881.         DX = connection number (0001h-max connections)
  1882.         ES:DI -> 28-byte buffer for connection information
  1883.         Return: CF clear if successful
  1884.                 ES:DI buffer filled
  1885.             CF set on error
  1886.                 AX = FFFFh
  1887.     ---Personal NetWare only---
  1888.         0002h ???
  1889.         0003h ???
  1890.         0004h ???
  1891.         0005h ???
  1892.         0006h ???
  1893.         0007h ???
  1894.         other
  1895.         Return: CF set
  1896.             AX = 0001h (invalid function)
  1897. --------d-2FD8C0-----------------------------
  1898. INT 2F U - Novell NLCACHE,NWCACHE - INSTALLATION CHECK
  1899.     AX = D8C0h
  1900. Return: AL = FFh if installed
  1901.         CL = cache variant (01h NLCACHEC, 02h NLCACHEX, 03h NLCACHEM)
  1902.         DH = major version??? (01h for v1.1)
  1903.         DL = minor version??? (01h for v1.1)
  1904.         ES:DI -> private API entry point (see #2243)
  1905. Program: NLCACHE is a disk cache included with NetWare Lite
  1906. SeeAlso: AX=D800h,AX=D880h
  1907.  
  1908. (Table 2243)
  1909. Call NLCACHE/NWCACHE API entry point with:
  1910.     BX = function
  1911.         0000h ???
  1912.         ???
  1913.         Return: CF clear if successful
  1914.                 AX = 0000h
  1915.                 ???
  1916.             CF set on error
  1917.                 AX = error code
  1918.         0001h (NWCACHE only) ???
  1919.         ES:DI -> buffer for ???
  1920.         Return: ???
  1921.         other
  1922.         Return: CF set
  1923.             AX = 0001h (invalid function)
  1924. --------F-2FDA00-----------------------------
  1925. INT 2F - ZyXEL ZFAX v1.x - INSTALLATION CHECK
  1926.     AX = DA00h
  1927. Return: AH = enabled state (00h = enabled, 01h = disabled)
  1928.     AL = 5Ah installed
  1929. Program: ZFAX is the bundled FAX software which comes with the ZyXEL model
  1930.       fax modems.
  1931. Note:    This function, and the other DAxxh functions, may apply only to version
  1932.       1 of the software; see AX=DB00h for the version 2 installation check
  1933. SeeAlso: AX=CBDCh,AX=DA01h,AX=DA02h,AX=DA03h,AX=DB00h
  1934. --------F-2FDA01-----------------------------
  1935. INT 2F - ZyXEL ZFAX v1.x - UNINSTALL
  1936.     AX = DA01h
  1937. Return: AL = 00h Success
  1938.          01h Failure
  1939. SeeAlso: AX=DA00h,AX=DB01h
  1940. --------F-2FDA02-----------------------------
  1941. INT 2F - ZyXEL ZFAX v.1x - DISABLE
  1942.     AX = DA02h
  1943. Return: AL = 00h
  1944. SeeAlso: AX=DA03h,AX=DB02h
  1945. --------F-2FDA03-----------------------------
  1946. INT 2F - ZyXEL ZFAX v1.x - ENABLE
  1947.     AX = DA03h
  1948. Return: AL = 00h
  1949. SeeAlso: AX=DA02h,AX=DB03h
  1950. --------G-2FDA55-----------------------------
  1951. INT 2F U - TRAP.COM - INSTALLATION CHECK
  1952.     AX = DA55h
  1953.     DL = interrupt number
  1954.     DH = ???
  1955. Return: if installed
  1956.         AH = interrupt number
  1957.         AL = ???
  1958.         ES:BX -> ???
  1959. Program: TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel
  1960. Note:    a separate copy of TRAP is loaded for each interrupt to be traced; thus
  1961.       the interrupt number is part of the installation check
  1962. --------N-2FDAB2-----------------------------
  1963. INT 2F U - Beame&Whiteside BWSNMP - INSTALLATION CHECK
  1964.     AX = DAB2h
  1965. Return: AX = 00FFh if installed
  1966.         BX:CX -> MIB table
  1967. Program: BWSNMP is part of the BW-NFS package
  1968. SeeAlso: INT 62/AH=00h"ETHDEV"
  1969. --------F-2FDB00-----------------------------
  1970. INT 2F - ZyXEL ZFAX v2+ - INSTALLATION CHECK
  1971.     AX = DB00h
  1972. Return:    AL = 5Bh if installed (v2.x)
  1973.         ES:BX -> configuration table???
  1974.     AX = 00DBh if installed (v3)
  1975.         ES:BX -> ZFAX configuration table (see #2244)
  1976. Program: ZFAX is the bundled FAX software which comes with the ZyXEL model
  1977.       Fax modems.
  1978. SeeAlso: AX=CBDCh,AX=DA00h,AX=DB01h,AX=DB02h,AX=DB03h
  1979.  
  1980. Format of ZFAX Configuration Table:
  1981. Offset    Size    Description    (Table 2244)
  1982.  00h    WORD    table version number (0300h for v3.0-v4.01)
  1983.  02h    BYTE    reserved
  1984.  03h 70 BYTEs    ZFAX working path
  1985.  49h 128 BYTEs    path to external editor
  1986.  C9h 128 BYTEs    path to external terminal emulator
  1987. 149h 128 BYTEs    path to Ring Shell
  1988. 1C9h 128 BYTEs    path to DOS Shell
  1989. 249h 128 BYTEs    path to Data Shell
  1990. 2C9h 70 BYTEs    path to Chinese font
  1991. 30Fh    BYTE    printer type (see #2245)
  1992. 310h    BYTE    printer port (00h = LPT1, etc.)
  1993. 311h    BYTE    type of graphics adapter
  1994.         (00h auto-detect, 01h VGA, 02h EGA, 03h CGA, 04h Hercules)
  1995. 312h    BYTE    display type
  1996.         (00h auto-detect, 01h LCD, 02h color, 03h mono)
  1997. 313h    BYTE    scan code for ZFAX hotkey (see #0005)
  1998. 314h    BYTE    shift mask for ZFAX hotkey
  1999. 315h    BYTE    tone/pulse dialing (00h tone, 01h pulse)
  2000. 316h    BYTE    Caller ID (00h disabled, 01h enabled)
  2001. 317h    BYTE    Distinctive Ring (00h disabled, 01h enabled)
  2002. 318h    BYTE    normal ring answer type (see #2246)
  2003. 319h    BYTE    Ring 1 answer type (see #2246)
  2004. 31Ah    BYTE    Ring 2 answer type (see #2246)
  2005. 31Bh    BYTE    Ring 3 answer type (see #2246)
  2006. 31Ch    BYTE    COM port for modem
  2007. 31Dh    BYTE    speaker volume (00h-07h)
  2008. 31Eh    BYTE    modem dial timer, seconds
  2009. 31Fh    WORD    user-defined COM port I/O address
  2010. 321h    BYTE    user-defined COM port IRQ number
  2011. 322h 81 BYTEs    dial prefix string
  2012. 373h 79 BYTEs    dial postfix string
  2013. 3C2h    BYTE    ring count until automatic answer
  2014. 3C3h    BYTE    retry count on busy signal
  2015. 3C4h    BYTE    redial delay in seconds
  2016. 3C5h    WORD    system password
  2017. 3C7h    BYTE    reserved
  2018. 3C8h    BYTE    voice file compression format
  2019.         00h CELP at 9600bps
  2020.         01h two-bit ADPCM at 19200bps
  2021.         02h three-bit ADPCM at 28800bps
  2022. 3C9h    BYTE    voice system: DTMF 0 action (see #2247)
  2023. 3CAh    BYTE    voice system: DTMF 1 action
  2024. 3CBh    BYTE    voice system: DTMF 2 action
  2025. 3CCh    BYTE    voice system: DTMF 3 action
  2026. 3CDh    BYTE    voice system: DTMF 4 action
  2027. 3CEh    BYTE    voice system: DTMF 5 action
  2028. 3CFh    BYTE    voice system: DTMF 6 action
  2029. 3D0h    BYTE    voice system: DTMF 7 action
  2030. 3D1h    BYTE    voice system: DTMF 8 action
  2031. 3D2h    BYTE    voice system: DTMF 9 action (see #2247)
  2032. 3D3h    WORD    reserved
  2033. 3D5h 25 BYTEs    local FAX ID to display on page header
  2034. 3EEh 20 BYTEs    local FAX ID sent to remote FAX
  2035. 402h    BYTE    FAX page size
  2036.         00h A4 (210x297mm)
  2037.         01h B4 (250x353mm)
  2038.         02h A3 (297x420mm)
  2039. 403h    BYTE    FAX resolution
  2040.         00h normal (3.85 pixels/mm)
  2041.         01h high (7.7 pixels/mm)
  2042. 404h    BYTE    FAX coding scheme
  2043.         00h 1-D, modified Huffman coding
  2044.         01h 2-D, modified READ coding
  2045. 405h    BYTE    left margin for text in millimeters
  2046. 406h    BYTE    vertical insertion for text in mm (0-20)
  2047. 407h    BYTE    horizontal insertion in mm (0-20)
  2048. 408h    BYTE    maximum text lines per page
  2049. 409h    BYTE    text type (00h ASCII, 01h WordStar-formatted)
  2050. 40Ah    BYTE    PCX image resize (00h disabled, 01h enabled)
  2051. 40Bh    BYTE    AutoPrint (00h disabled, 01h enabled)
  2052. 40Ch    BYTE    cover page (00h disabled, 01h enabled)
  2053. 40Dh 81 BYTEs    cover page logo filename
  2054. 45Eh 65 BYTEs    cover page sender name
  2055. 49Fh    BYTE    print capture (00h disabled, 01h enabled)
  2056. 4A0h    BYTE    send immediately (00h disabled, 01h enabled)
  2057. 4A1h    BYTE    print capture printer port
  2058. 4A2h    BYTE    print capture timer in seconds
  2059. 4A3h    BYTE    scan code for print capture hotkey (see #0005)
  2060. 4A4h    BYTE    shift mask for print capture hotkey
  2061. 4A5h    BYTE    DataShell type
  2062.         00h internal Zmodem, 01h Data Shell, 02h disable
  2063. 4A6h    BYTE    video I/O type
  2064.         00h auto-detect, 01h use BIOS, 02h direct writes
  2065. 4A7h    BYTE    call transfer digits (0-9)
  2066. 4A8h    WORD    voice recorder maximum time in seconds (0-999)
  2067.  
  2068. (Table 2245)
  2069. Values for ZFAX printer type:
  2070.  00h    EPSON FX (9 pins)
  2071.  01h    EPSON LQ (24 pins)
  2072.  02h    HP Laser Jet II, letter size
  2073.  03h    HP Laser Jet II, legal size
  2074.  04h    HP Laser Jet II, A4 size
  2075.  05h    HP Laser Jet III, letter size
  2076.  06h    HP Laser Jet III, legal size
  2077.  07h    HP Laser Jet III, A4 size
  2078. SeeAlso: #2244
  2079.  
  2080. (Table 2246)
  2081. Values for Ring Answer Type:
  2082.  00h    voice system
  2083.  01h    FAX only
  2084.  02h    Data Shell
  2085.  03h    Ring Shell
  2086.  04h    DOS Shell
  2087.  05h    ignore
  2088. SeeAlso: #2244
  2089.  
  2090. (Table 2247)
  2091. Values for DTMF action:
  2092.  00h    none
  2093.  01h    page operator
  2094.  02h    FaxBack
  2095.  03h    announcement
  2096.  04h    call transfer
  2097.  05h    receive FAX
  2098.  06h    receive data
  2099.  07h    voice mailbox
  2100.  08h    DOS Shell Out
  2101.  09h    Data Shell Out
  2102. SeeAlso: #2244
  2103. --------U-2FDB00-----------------------------
  2104. INT 2F U - WINGO.COM - INSTALLATION CHECK
  2105.     AX = DB00h
  2106. Return: AX = FFFFh if installed
  2107.     CX = 5749h ('WI') if installed
  2108.     DX = 4E47h ('NG') if installed
  2109.         ES = segment of resident code
  2110. Program: WINGO.COM is TSR for starting Windows programs from DOS
  2111.       prompt (together with companion Windows program
  2112.       WINSTART.EXE) written by Douglas Boling, contributing editor of
  2113.       PC Magazine
  2114. Range:    AH=DBh to AH=FFh, selected by scanning for a free multiplex number
  2115. SeeAlso: AX=DB01h"WINGO",AX=DB02h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  2116. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  2117. --------F-2FDB01-----------------------------
  2118. INT 2F - ZyXEL ZFAX v2+ - UNINSTALL
  2119.     AX = DB01h
  2120. Return: AX = status
  2121.         0000h successful
  2122.         0001h ZFAX is busy
  2123.         0002h another program resident above ZFAX
  2124. Note:    this function unhooks the vectors taken by the ZFAX TSR if they have
  2125.       not been hooked by other TSRs and releases the TSR's memory
  2126.     ZFAX v2.x crashes the contributor's machine when this function is
  2127.       called
  2128. SeeAlso: AX=DA01h,AX=DB00h"ZFAX",AX=DB02h"ZFAX"
  2129. --------U-2FDB01-----------------------------
  2130. INT 2F U - WINGO.COM - SET CALLBACK FUNCTION POINTER
  2131.     AX = DB01h
  2132.     CX:DX -> new callback function
  2133. Return: AX = 0000h
  2134.     CX:DX -> end of resident code (stack ???)
  2135. Desc:    the callback function is used for WINGO <-> WINSTART communication
  2136. SeeAlso: AX=DB00h"WINGO",AX=DB02h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  2137. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  2138. --------F-2FDB02-----------------------------
  2139. INT 2F - ZyXEL ZFAX v2.x - DISABLE
  2140.     AX = DB02h
  2141. Return: AL = 00h
  2142. SeeAlso: AX=DA02h,AX=DB00h"ZFAX",AX=DB01h"ZFAX",AX=DB03h"ZFAX"
  2143. --------U-2FDB02-----------------------------
  2144. INT 2F U - WINGO.COM - RESET CALLBACK FUNCTION POINTER
  2145.     AX = DB02h
  2146. Return: AX = 0000h
  2147. Desc:    the callback function is used for WINGO <-> WINSTART communication
  2148. SeeAlso: AX=DB00h"WINGO",AX=DB01h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  2149. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  2150. --------F-2FDB03-----------------------------
  2151. INT 2F - ZyXEL ZFAX v2.x - ENABLE
  2152.     AX = DB03h
  2153. Return: AL = 00h
  2154. SeeAlso: AX=DA03h,AX=DB00h"ZFAX",AX=DB02h"ZFAX"
  2155. --------U-2FDB03-----------------------------
  2156. INT 2F U - WINGO.COM - SET ??? FLAG
  2157.     AX = DB03h
  2158. Return: AX = 0000h
  2159. SeeAlso: AX=DB00h"WINGO",AX=DB04h"WINGO",AX=DB05h"WINGO",AX=DB06h"WINGO"
  2160. --------U-2FDB04-----------------------------
  2161. INT 2F U - WINGO.COM - RESET ??? FLAG
  2162.     AX = DB04h
  2163. Return: AX = 0000h
  2164. SeeAlso: AX=DB00h"WINGO",AX=DB03h"WINGO",AX=DB05h"WINGO",AX=DB06h"WINGO"
  2165. --------U-2FDB05-----------------------------
  2166. INT 2F U - WINGO.COM - GET ??? FLAG
  2167.     AX = DB05h
  2168. Return: AX = 0000h
  2169.     DX = unknown flag - 0 or 1
  2170. Program: WINGO.COM is TSR for starting Windows programs from DOS
  2171.       prompt (together with companion Windows program
  2172.       WINSTART.EXE) written by Douglas Boling, contributing editor of
  2173.       PC Magazine
  2174. SeeAlso: AX=DB00h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  2175. --------U-2FDB06-----------------------------
  2176. INT 2F U - WINGO.COM - CALL CALLBACK FUNCTION
  2177.     AX = DB06h
  2178. Return: AX = return value of INT 2F/AX=1685h
  2179. Note:    uses Windows service INT 2F/AX=1685h (SWITCH VMs AND CALLBACK) to
  2180.       call the callback function previously set by AX=DB01h
  2181.     used for WINGO <-> WINSTART communication
  2182. SeeAlso: AX=1685h, AX=DB00h"WINGO",AX=DB01h"WINGO",AX=DB02h"WINGO",
  2183. SeeAlso: AX=DB03h"WINGO",AX=DB04h"WINGO",AX=DB05h"WINGO"
  2184. --------F-2FDB10-----------------------------
  2185. INT 2F - ZyXEL ZFAX v3+ - EXECUTE ZFAX MAIN MENU
  2186.     AX = DB10h
  2187. SeeAlso: AX=DB00h"ZFAX",AX=DB11h"ZFAX"
  2188. --------F-2FDB11-----------------------------
  2189. INT 2F - ZyXEL ZFAX v3+ - SEND FAX
  2190.     AX = DB11h
  2191.     DS:SI -> filename including path (max 128 characters)
  2192.     DS:BX -> remote FAX number
  2193. Return:    AX = status (see #2248)
  2194. SeeAlso: AX=DB00h"ZFAX",AX=DB12h,AX=DB13h,AX=DB14h,AX=DB15h,AX=DB20h,AX=DB21h
  2195.  
  2196. (Table 2248)
  2197. Values for ZFAX status:
  2198.  00h    OK
  2199.  01h    invalid DOS function
  2200.  02h    file not found
  2201.  03h    path not found
  2202.  04h    no file handle available
  2203.  05h    access denied by DOS
  2204.  06h    invalid handle
  2205.  07h    disk full
  2206.  10h    printer error
  2207.  11h    no graphics font
  2208.  12h    no ZFAX font
  2209.  20h    DCD dropped while sending
  2210.  21h    not ZyXEL modem
  2211.  22h    busy
  2212.  23h    no response from COM port
  2213.  24h    no carrier
  2214.  25h    no dial tone
  2215.  26h    no answer
  2216.  27h    no response
  2217.  28h    failed to send FAX
  2218.  30h    user aborted
  2219.  40h    critical error on disk
  2220.  50h    parameter error
  2221. --------F-2FDB12-----------------------------
  2222. INT 2F - ZyXEL ZFAX v3+ - PRINT FAX
  2223.     AX = DB12h
  2224.     DS:SI -> filename, including path (max 128 characters)
  2225. Return: AX = status (see #2248)
  2226. SeeAlso: AX=DB11h,AX=DB13h,AX=DB14h
  2227. --------F-2FDB13-----------------------------
  2228. INT 2F - ZyXEL ZFAX v3+ - CONVERT FAX
  2229.     AX = DB13h
  2230.     DS:SI -> source filename, including path (max 128 characters)
  2231.     DS:BX -> destination filename, including path (max 80 characters)
  2232.     CX = destination file format
  2233.         00h FAX, 01h PCX, 02h TIFF, 03h PRN
  2234. Return: AX = status (see #2248)
  2235. SeeAlso: AX=DB11h,AX=DB12h,AX=DB14h,AX=DB22h
  2236. --------F-2FDB14-----------------------------
  2237. INT 2F - ZyXEL ZFAX v3+ - VIEW FAX
  2238.     AX = DB14h
  2239.     DS:SI -> source filename, including path (max 128 characters)
  2240. Return: AX = status (see #2248)
  2241. SeeAlso: AX=DB11h,AX=DB12h,AX=DB14h
  2242. --------F-2FDB15-----------------------------
  2243. INT 2F - ZyXEL ZFAX v4.01 - SEND FAX WITH LOGO AND SIGNATURE
  2244.     AX = DB15h
  2245.     DS:SI -> source filename, including path (max 128 characters)
  2246.     DS:BX -> remote FAX number
  2247.     DS:CX -> Logo filename
  2248.     DS:DX -> Signature filename
  2249. Return: AX = status (see #2248)
  2250. SeeAlso: AX=DB00h"ZFAX",AX=DB11h
  2251. --------F-2FDB16-----------------------------
  2252. INT 2F - ZyXEL ZFAX v4.01 - QUOTE PREVIOUS STATUS
  2253.     AX = DB16h
  2254. Return: DX:AX -> previous receive state transaction log (see #3171)
  2255.     BX = type (00h incoming FAX, 01h incoming data, 02h incoming voice)
  2256. SeeAlso: AX=DB00h"ZFAX",AX=DB11h,AX=DB17h
  2257.  
  2258. Format of ZFAX transaction log receive state:
  2259. Offset    Size    Description    (Table 3171)
  2260.  00h    WORD    year
  2261.  02h    WORD    date
  2262.  04h    WORD    time
  2263.  06h    WORD    extension number
  2264.  08h    WORD    type: 00h incoming FAX, 01h outgoing FAX, 02h voice message
  2265.  0Ah    WORD    status: 00h normal, 01h remote delete
  2266.  0Ch 125 BYTEs    filename
  2267.  89h 24 BYTEs    caller ID
  2268.  A1h 20 BYTEs    FAX number
  2269.  B5h 20 BYTEs    remote FAX ID
  2270.  C9h    WORD    error code
  2271.  CBh    WORD    connection direction (00h transmit, 01h receive)
  2272.  CDh    BYTE    connection time minutes
  2273.  CEh    BYTE    connection time seconds
  2274.  CFh    BYTE    ???
  2275.  D0h    WORD    connection speed (24, 48, 72, 96, 12, 144)
  2276.  D2h    WORD    connection page size (A4, B4, A3)
  2277.  D4h    WORD    connection coding scheme (1-DN, 1-DH, 2-DN, 2-DH)
  2278.  D6h    WORD    page count
  2279. --------F-2FDB17-----------------------------
  2280. INT 2F - ZyXEL ZFAX v4.01 - BEGIN RECEIVING INCOMING CALL
  2281.     AX = DB17h
  2282. Return: AX = status (0000h successful, 0001h unable to start at this time)
  2283. SeeAlso: AX=DB00h"ZFAX"
  2284. --------F-2FDB18-----------------------------
  2285. INT 2F - ZyXEL ZFAX v4.01 - SCHEDULE CALL
  2286.     AX = DB18h
  2287.     DS:SI -> schedule data (see #3171)
  2288. Return: AX = status (see #2248)
  2289. SeeAlso: AX=DB00h"ZFAX"
  2290. --------F-2FDB20-----------------------------
  2291. INT 2F - ZyXEL ZFAX v3+ - POLL FAX
  2292.     AX = DB20h
  2293.     DS:SI -> remote FAX number
  2294. Return: AX = status (see #2248)
  2295. SeeAlso: AX=DB11h,AX=DB21h
  2296. --------F-2FDB21-----------------------------
  2297. INT 2F - ZyXEL ZFAX v3+ - SEND VOICE
  2298.     AX = DB21h
  2299.     DS:SI -> filename including path (max 128 characters)
  2300.     DS:BX -> remote phone number
  2301. Return:    AX = status (see #2248)
  2302. SeeAlso: AX=DB11h,AX=DB20h,AX=DB22h,AX=DB23h,AX=DB24h
  2303. --------F-2FDB22-----------------------------
  2304. INT 2F - ZyXEL ZFAX v3+ - CONVERT VOICE FILE
  2305.     AX = DB22h
  2306.     DS:SI -> source filename, including path (max 128 characters)
  2307.     DS:BX -> destination filename, including path (max 80 characters)
  2308.     CX = destination format
  2309.         00h two-bit ADPCM, 01h three-bit ADPCM, 02h VOC
  2310. Return:    AX = status (see #2248)
  2311. SeeAlso: AX=DB13h,AX=DB20h,AX=DB21h,AX=DB23h
  2312. --------F-2FDB23-----------------------------
  2313. INT 2F - ZyXEL ZFAX v3+ - RECORD VOICE FILE
  2314.     AX = DB23h
  2315.     DS:SI -> destination filename, including path (max 128 characters)
  2316.     CX = recording channel (0 = telephone line, 1 = microphone/speaker)
  2317.     DX = voice file format
  2318.         00h CELP, 01h two-bit ADPCM, 02h three-bit ADPCM
  2319. Return: AX = status (see #2248)
  2320. SeeAlso: AX=DB21h,AX=DB22h,AX=DB24h
  2321. --------F-2FDB24-----------------------------
  2322. INT 2F - ZyXEL ZFAX v3+ - PLAY VOICE FILE
  2323.     AX = DB24h
  2324.     DS:SI -> name of voice file, including path (max 128 characters)
  2325.     CX = playback channel (0 = telephone line, 1 = microphone/speaker)
  2326. Return: AX = status (see #2248)
  2327. SeeAlso: AX=DB21h,AX=DB22h,AX=DB24h
  2328. --------F-2FDB25-----------------------------
  2329. INT 2F - ZyXEL ZFAX v3+ - ANSWER MODEM WITH VOICE SYSTEM
  2330.     AX = DB25h
  2331. Return: AX = status (see #2248)
  2332. SeeAlso: AX=DB21h,AX=DB22h,AX=DB26h,AX=DB27h,AX=DB28h
  2333. --------F-2FDB26-----------------------------
  2334. INT 2F - ZyXEL ZFAX v3+ - DIAL PHONE
  2335.     AX = DB26h
  2336.     DS:SI -> remote phone number
  2337. Return: AX = status (see #2248)
  2338. SeeAlso: AX=DB25h
  2339. --------F-2FDB27-----------------------------
  2340. INT 2F - ZyXEL ZFAX v3+ - RECEIVE FAX - ANSWER MODEM AND SET TO FAX MODE
  2341.     AX = DB27h
  2342. Return: AX = status (see #2248)
  2343. SeeAlso: AX=DB25h,AX=DB28h
  2344. --------F-2FDB28-----------------------------
  2345. INT 2F - ZyXEL ZFAX v3+ - RECEIVE FAX DATA - ANSWER MODEM IN MULTI-AUDIO MODE
  2346.     AX = DB28h
  2347. Return: AX = status (see #2248)
  2348. SeeAlso: AX=DB25h,AX=DB27h,AX=DB41h
  2349. --------F-2FDB40-----------------------------
  2350. INT 2F - ZyXEL ZFAX v3+ - INTERNAL TERMINAL
  2351.     AX = DB40h
  2352. Return: AX = status (see #2248)
  2353. SeeAlso: AX=DB00h
  2354. --------F-2FDB41-----------------------------
  2355. INT 2F - ZyXEL ZFAX v3+ - SEND DATA - DIAL NUMBER AND UPLOAD FILE WITH ZMODEM
  2356.     AX = DB41h
  2357.     DS:SI -> source file name, including path (max 128 characters)
  2358.     DS:BX -> remote data number
  2359. Return: AX = status (see #2248)
  2360. SeeAlso: AX=DB00h,AX=DB28h
  2361. --------K-2FDC00-----------------------------
  2362. INT 2F - GOLD.COM - INSTALLATION CHECK
  2363.     AX = DC00h
  2364. Return: AL = state
  2365.         00h not installed
  2366.         FFh installed
  2367. Program: GOLD is a TSR by Bob Eager which makes the NumLock key return the code
  2368.       for F1; the purpose is to improve Kermit's VTxxx emulation
  2369. --------K-2FDC01-----------------------------
  2370. INT 2F - GOLD.COM - GET STATE
  2371.     AX = DC01h
  2372. Return: AL = status
  2373.         00h off
  2374.         01h on
  2375. SeeAlso: AX=DC00h,AX=DC02h
  2376. --------K-2FDC02-----------------------------
  2377. INT 2F - GOLD.COM - SET STATE
  2378.     AX = DC02h
  2379.     DL = new state
  2380.         00h off
  2381.         01h on
  2382. Return: AL = 00h (OK)
  2383. SeeAlso: AX=DC01h
  2384. --------t-2FDD-------------------------------
  2385. INT 2F - CappaCom programs - API
  2386.     AH = DDh
  2387.     AL = 00h general installation check
  2388.         Return: AL = FFh if any CappaCom programs are resident
  2389.     AL = FEh get info
  2390.         Return: ES:BX -> TSR info list (see #2249)
  2391.     AL = program identifier
  2392.         BH = function
  2393.         FDh get version
  2394.             Return: BX = version
  2395.         FFh installation check
  2396.             Return: AL = FFh if installed
  2397.                 BX = version
  2398.                 ES = segment of resident code
  2399.         others vary by program
  2400. Return: AL = status
  2401.         bit 7 set on error
  2402.         AL = 81h unknown function
  2403. Note:    CappaCom was originally SoftCom but changed its name due to a trademark
  2404.       conflict
  2405. Index:    installation check;SoftCom programs
  2406. Index:    installation check;CappaCom programs
  2407.  
  2408. Format of CappaCom TSR info list:
  2409. Offset    Size    Description    (Table 2249)
  2410.  00h  9 BYTEs    blank-padded ASCIZ program name
  2411.  09h    BYTE    program ID
  2412.  0Ah    WORD    program's PSP segment
  2413.  0Ch    WORD    program version (major in high byte)
  2414.  0Eh    DWORD    pointer to next item in info list or 0000h:0000h
  2415.  12h    BYTE    number of interrupts hooked
  2416.  13h  5 BYTEs    interrupt numbers hooked by program
  2417.  18h  8 BYTEs    reserved
  2418. ----------2FDD-------------------------------
  2419. INT 2F - MIXFIX.EXE - API
  2420.     AH = DDh
  2421.     AL = function
  2422.         00h installation check
  2423.         Return: AX = 00DDh if installed
  2424.                 BX = version (BH = major, BL = minor)
  2425.         41h/61h get From: address
  2426.         Return: AX = 0001h
  2427.             ES:BX -> ASCIZ 4d address of mail sender ("1:2/3.4")
  2428.         49h/69h get To: address
  2429.         Return: AX = 0001h
  2430.             ES:BX -> ASCIZ 4d address of recipient ("1:2/3.4")
  2431.         4Ah/6Ah get subject of mail
  2432.         Return: AX = 0001h
  2433.             ES:BX -> ASCIZ subject of handled mail
  2434.         4Dh/6Dh get mail name
  2435.         Return: AX = 0001h
  2436.             ES:BX -> ASCIZ full name of current mail file
  2437.         4Eh/6Eh get From: field
  2438.         Return: AX = 0001h
  2439.             ES:BX -> ASCIZ From: field of mail (mail sender's name)
  2440. Program: MIXFIX by "KIV without Co" is a FidoNet mail robot which may execute
  2441.       other programs for mail handling.  The called programs may use the
  2442.       services described here to retrieve information about the mail being
  2443.       handled.
  2444. Index: installation check;MIXFIX.EXE
  2445. --------d-2FDD--BX7844-----------------------
  2446. INT 2F - xDISK v3.32+ - INSTALLATION CHECK
  2447.     AH = DDh
  2448.     BX = 7844h ('xD')
  2449.     CX = 4953h ('IS')
  2450.     DX = 4B3Fh ('K?')
  2451.     AL = desired drive (01h-1Ah) or 00h to check for xDISK on any drive
  2452.     ES:DI -> 25-byte data buffer (see #2250)
  2453. Return: AX = DDFFh if installed (on specified drive if AL nonzero on entry)
  2454.        BX = 87BBh
  2455.        DX = B4C0h
  2456.        ES:DI buffer filled
  2457.     CX,CF destroyed
  2458. SeeAlso: INT 21/AX=4404h"xDISK",INT 21/AX=4405h"xDISK"
  2459.  
  2460. Format of xDISK data buffer:
  2461. Offset    Size    Description    (Table 2250)
  2462.  00h    DWORD    pointer to ASCIZ driver signature "xDISK unit: X"
  2463.  04h    BYTE    flag: 01h if disk linked to DOS, 00h if unlinked
  2464.  05h    BYTE    flag: 01h if write protected, 00h if not
  2465.  06h    BYTE    flag: 01h if root directory full, 00h if not
  2466.  07h    BYTE    flag: 01h if free space uncompacted, 00h if compacted
  2467.  08h    BYTE    resizing state: 00h not resizable, 01h resized, 80h resizable
  2468.  09h    BYTE    flag: 01h inelastic resizable disk, 00h elastic
  2469.  0Ah  2 BYTEs    reserved
  2470.  0Ch    BYTE    flag: 01h collapsed disk, 00h not collapsed
  2471.  0Dh    BYTE    flag: 01h using all EMS, 00h some EMS free
  2472.  0Eh    BYTE    flag: 01h password enabled, 00h disabled
  2473.  0Fh    BYTE    flag: 01h password audio feedback, 00h no feedback
  2474.  10h    BYTE    flag: 01h password video feedback, 00h no feedback
  2475.  11h    BYTE    flag: 01h confirm changes, 00h no confirmation
  2476.  12h    BYTE    flag: 01h terse display, 00h verbose display
  2477.  13h    BYTE    flag: 01h click speaker on disk access, 00h no click
  2478.  14h    BYTE    flag: 01h flash icon on disk access, 00h no icon flash
  2479.  15h    BYTE    FAT entry size: 00h 12-bit, FFh 16-bit
  2480.  16h    WORD    count of open files in RAM disk
  2481.  18h    BYTE    unused
  2482. --------N-2FDE00BL00-------------------------
  2483. INT 2F U - Novell Netware - RPRINTER, NPRINTER - INSTALLATION CHECK
  2484.     AX = DE00h
  2485.     BL = 00h
  2486. Return: AL = FFh If Rprinter/Nprinter Installed
  2487.     BX -> Program Segment Prefix N/Rprinter.exe
  2488. --------Q-2FDE00BX4456-----------------------
  2489. INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK
  2490.     AX = DE00h
  2491.     BX = 4456h ("DV")
  2492.     CX = 5844h ("XD")
  2493.     DX = 4931h ("I1")
  2494. Return: AL = FFh if installed (even if other registers do not match)
  2495.     if BX,CX, and DX were as specified on entry,
  2496.         BX = 4845h ("HE")
  2497.         CX = 5245h ("RE")
  2498.         DX = 4456h ("DV")
  2499. Range:    AH=C0h to AH=FFh, selected by scanning AH=DEh-FFh, then AH=C0h-DDh
  2500. Note:    the XDI handler should not issue any DOS or BIOS calls, nor should it
  2501.       issue DESQview API calls other than those allowed from hardware ints
  2502. SeeAlso: AX=DE02h,INT 15/AX=5400h
  2503. --------Q-2FDE01-----------------------------
  2504. INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
  2505.     AX = DE01h
  2506.     BX = driver ID
  2507.     other registers as needed by driver
  2508. Notes:    XDI drivers should pass this call through to previous handler if ID
  2509.       does not match
  2510.     DESQview never calls this function
  2511. --------Q-2FDE01BX4450-----------------------
  2512. INT 2F U - Quarterdeck QDPMI.SYS v1.0 - INSTALLATION CHECK
  2513.     AX = DE01h
  2514.     BX = 4450h ("DP")
  2515.     CX = 4D49h ("MI")
  2516.     DX = 3039h ("09")
  2517. Return: AL = FFh if installed
  2518.         BX = 4D42h ("MB")
  2519.         CX = 4921h ("I!")
  2520.         DX = 8F4Fh
  2521.         ES:DI -> filename of DPMI host overlay
  2522. Note:    the installation check consists of testing for the existence of the
  2523.       character device QDPMI$$$
  2524. SeeAlso: INT 2F/AX=1687h,INT 31/AX=0000h
  2525. Index:    installation check;QDPMI
  2526. --------U-2FDE01BX5242-----------------------
  2527. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
  2528.     AX = DE01h
  2529.     BX = 5242h ("RB")
  2530.     CX:DX = program identifier
  2531.         656F7000h ("eop",0) for DVeop
  2532. Return: AX = 5242h ("RB") if installed
  2533.         ES:BX -> data or entry point (see #2251)
  2534.         CX = version number (CH = major, CL = minor)
  2535.  
  2536. (Table 2251)
  2537. Call DVeop entry point with:
  2538.     ES:DI -> callback address or 0000h:0000h to remove callback
  2539. Return: AX = status
  2540.         0000h failed (callback table full or attempted to remove non-
  2541.           existent callback)
  2542.         0001h successful
  2543.         ES:DI -> chaining address
  2544.     BX,CX,DX destroyed
  2545. Notes:    the callback function is called with a simulated interrupt when the
  2546.       DESQview window containing it is closed; it should perform all
  2547.       necessary cleanup and then perform a FAR jump to the chaining address
  2548.       or an IRET if the chaining address is 0000h:0000h
  2549.     if the program wishes to remove itself before the window is closed, it
  2550.       should call the DVeop entry point with the previously returned
  2551.       chaining address and ignore the returned chaining address.
  2552. --------U-2FDE01BX7474-----------------------
  2553. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
  2554.     AX = DE01h
  2555.     BX = 7474h
  2556.     CL = function
  2557.         00h installation check
  2558.         Return: AL = FFh
  2559.         01h get process handle
  2560.         DX = keys on Open Window menu (DL = first, DH = second)
  2561.         Return: AX = process handle or 0000h if not running
  2562.         02h (v1.3+) set TMAN handle
  2563.         DX = TMAN process handle
  2564.         03h (v1.3+) set open keys to ignore on next CL=01h call
  2565.         DX = keys on Open Window menu (DL = first, DH = second)
  2566. Return: BX = 4F4Bh ("OK")
  2567.     DL destroyed
  2568. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  2569.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  2570. Index:    installation check;DVTXDI
  2571. --------U-2FDE01BX7575-----------------------
  2572. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
  2573.     AX = DE01h
  2574.     BX = 7575h
  2575.     CX = function
  2576.         0000h installation check
  2577.         Return: AX = 00FFh if installed
  2578.         0001h turn on notification (currently unused)
  2579.         Return: AX = 0001h
  2580.         0002h turn off notification (currently unused)
  2581.         Return: AX = 0001h
  2582.         0003h get process information
  2583.         Return: AX = status
  2584.                 0000h failed
  2585.                 0001h successful
  2586.                 BX = last instantaneous time slice
  2587.                     in 1/100s (v1.10)
  2588.                     in 1/18s (v1.11+)
  2589.                 CX = number of processes
  2590.                 DX = number of "(starting)" records (v2.00+)
  2591.                 SI = number of records in process info array
  2592.                       (v2.00+) (always 15 for v1.x)
  2593.                 ES:DI -> process info array (see #2252,#2253)
  2594.         0004h get version
  2595.         Return: AH = major version
  2596.             AL = minor version
  2597.         0005h (v1.10+) get time since DESQview started
  2598.         Return: DX:AX = 1/100s since DV start (v1.10)
  2599.             DX:AX = 1/18s since DV start (v1.11+)
  2600.         0006h (v1.10+) get number of task switches
  2601.         Return: DX:AX = total task switches
  2602.             CX = task switches in last instantaneous interval
  2603. Notes:    DVSIXDI is part of the DVSI (DESQview System Information) package by
  2604.       Daniel J. Bodoh
  2605.     for v1.00, function 0003h allocates common memory, which the caller
  2606.       must deallocate after reading the process information; only the
  2607.       currently used records are placed in the buffer
  2608.     for v1.10+, function 0003h merely returns a pointer to the internal
  2609.       array of process information; the caller should make a copy of the
  2610.       array while inside a critical section (see INT 15/AX=101Bh).    Only
  2611.       those records with bit 7 of the first byte set are valid.
  2612. Index:    installation check;DVSIXDI
  2613.  
  2614. Format of DVSIXDI v1.00 information for one process:
  2615. Offset    Size    Description    (Table 2252)
  2616.  00h    BYTE    flags
  2617.         bit 7: process slot is valid
  2618.  01h    WORD    offset into DESQVIEW.DVO of program's record if started from
  2619.           Open Windows menu, else undefined
  2620.  03h    WORD    Switch Windows window number
  2621.  05h    WORD    segment of process handle
  2622.  07h    WORD    number of tasks owned by process
  2623.  09h    WORD    mapping context of process (see #0315 at INT 15/AX=1016h)
  2624.  0Bh    DWORD    hook for other programs
  2625.  
  2626. Format of DVSIXDI v1.10-v2.00 information for one process:
  2627. Offset    Size    Description    (Table 2253)
  2628.  00h    BYTE    process flags (see #2254)
  2629.  01h    WORD    Open Window keys
  2630.  03h    WORD    Switch Windows number
  2631.  05h    WORD    segment of process handle
  2632.  07h    WORD    number of tasks for process
  2633.  09h    WORD    process mapping context
  2634.  0Bh    DWORD    time process started (relative to start of DESQview)
  2635.  0Fh    DWORD    time process last got CPU (relative to start of DESQview)
  2636.  13h    DWORD    time process last gave up CPU (relative to start of DESQview)
  2637.  17h    DWORD    total CPU time since process started
  2638.  1Bh    DWORD    CPU time at start of current instantaneous interval
  2639.  1Fh    DWORD    CPU time in current instantaneous interval
  2640.  23h    DWORD    hook for other programs
  2641. Note:    all times are in 1/100s for v1.10, in 1/18s for v1.11+
  2642.  
  2643. Bitfields for DVSIXDI process flags:
  2644. Bit(s)    Description    (Table 2254)
  2645.  7    valid record
  2646.  6    (v2.00+) record is allocated; if bit 7 clear, process is "(starting)"
  2647.       and only offsets 01h and 09h are valid
  2648.  5    (v2.00+) this app currently owns the CPU
  2649.  4    reserved (0)
  2650.  3    DESQview system task
  2651.  2    reserved (0)
  2652.  1    task has keyboard (currently unused)
  2653.  0    task swapped out (currently unused)
  2654. --------Q-2FDE01BXFFFE-----------------------
  2655. INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ???
  2656.     AX = DE01h
  2657.     BX = FFFEh
  2658.     CX = 4D47h ("MG")
  2659.     DX = 0052h (0,"R")
  2660. Return: AL = FFh
  2661.     DX = 584Dh
  2662. --------Q-2FDE02-----------------------------
  2663. INT 2F C - DESQview v2.26+ External Dev Interface - DV INITIALIZATION COMPLETE
  2664.     AX = DE02h
  2665.     BX = mapping context of DESQview
  2666.     DX = handle of DESQview system task
  2667. Note:    driver should pass this call to previous handler after doing its work
  2668. SeeAlso: AX=DE03h,AX=DE0Fh,INT 15/AX=5400h
  2669. --------Q-2FDE03-----------------------------
  2670. INT 2F C - DESQview v2.26+ External Dev Interface - DV TERMINATION
  2671.     AX = DE03h
  2672.     BX = mapping context of DESQview
  2673.     DX = handle of DESQview system task
  2674. Notes:    driver should pass this call to previous handler before doing its work
  2675.     DESQview makes this call when it is exiting, but before unhooking any
  2676.       interrupt vectors
  2677. SeeAlso: AX=DE02h,AX=DE0Fh,INT 15/AX=5407h
  2678. --------Q-2FDE04-----------------------------
  2679. INT 2F C - DESQview v2.26+ External Dev Interface - ADD PROCESS
  2680.     AX = DE04h
  2681.     BX = mapping context of new process (see #0315 at INT 15/AX=1016h)
  2682.     DX = handle of process
  2683. Return: nothing
  2684. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  2685.       (see #2255) from "common" memory to control access to XMS memory
  2686.     all DOS, BIOS, and DV API calls are valid in handler
  2687.     driver should pass this call to previous handler after processing it
  2688. SeeAlso: AX=DE05h,AX=DE06h,INT 15/AX=5401h
  2689.  
  2690. Format of XMS XDI structure:
  2691. Offset    Size    Description    (Table 2255)
  2692.  00h    DWORD    pointer to 10-byte record???
  2693.  04h    DWORD    pointer to next XMS XDI structure
  2694.  08h    WORD    mapping context
  2695.  0Ah    BYTE    ???
  2696.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  2697.         (FAR jump to next field)
  2698.  10h  6 BYTEs    FAR handler for XMS driver entry point
  2699.         (consists of a FAR CALL followed by RETF)
  2700. --------Q-2FDE05-----------------------------
  2701. INT 2F C - DESQview v2.26+ External Dev Interface - REMOVE PROCESS
  2702.     AX = DE05h
  2703.     BX = mapping context of process (see #0315 at INT 15/AX=1016h)
  2704.     DX = handle of last task in process
  2705. Return: nothing
  2706. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  2707.     driver should pass this call to previous handler before processing it
  2708.     all DOS, BIOS, and DV API calls except those generating a task switch
  2709.       are valid in handler
  2710. SeeAlso: AX=DE04h,AX=DE07h,INT 15/AX=5402h
  2711. --------Q-2FDE06-----------------------------
  2712. INT 2F C - DESQview v2.26+ External Dev Interface - CREATE TASK
  2713.     AX = DE06h
  2714.     BX = mapping context of process containing task
  2715.     DX = handle of new task
  2716. Notes:    driver should pass this call to previous handler after processing it
  2717.     all DOS, BIOS, and DV API calls are valid in handler
  2718. --------Q-2FDE07-----------------------------
  2719. INT 2F C - DESQview v2.26+ External Dev Interface - TERMINATE TASK
  2720.     AX = DE07h
  2721.     BX = mapping context of process containing task
  2722.     DX = handle of task
  2723. Notes:    driver should pass this call to previous handler before processing it
  2724.     all DOS, BIOS, and DV API calls except those generating a task switch
  2725.       are valid in handler
  2726. SeeAlso: AX=DE04h,AX=DE06h,AX=DE10h
  2727. --------Q-2FDE08-----------------------------
  2728. INT 2F C - DESQview v2.26+ External Dev Interface - SAVE STATE
  2729.     AX = DE08h
  2730.     BX = mapping context of task being switched from
  2731.           (see #0315 at INT 15/AX=1016h)
  2732.     DX = handle of task being switched from
  2733. Notes:    invoked prior to task swap, interrupts, etc
  2734.     driver should pass this call to previous handler after processing it
  2735. SeeAlso: AX=DE09h,INT 15/AX=5403h,INT 15/AX=DE27h
  2736. --------Q-2FDE09-----------------------------
  2737. INT 2F C - DESQview v2.26+ External Dev Interface - RESTORE STATE
  2738.     AX = DE09h
  2739.     BX = mapping context of task being switched to
  2740.           (see #0315 at INT 15/AX=1016h)
  2741.     DX = handle of task being switched to
  2742. Notes:    state is restored except for interrupts
  2743.     driver should pass this call to previous handler before processing it
  2744. SeeAlso: AX=DE08h,INT 15/AX=5404h,INT 15/AX=DE27h
  2745. --------Q-2FDE0A-----------------------------
  2746. INT 2F C - DESQview v2.26+ External Dev Interface - CHANGE KEYBOARD FOCUS
  2747.     AX = DE0Ah
  2748.     BX = mapping context of task receiving focus
  2749.     DX = handle of running task
  2750. Notes:    driver should pass this call to previous handler before processing it
  2751.     this call often occurs inside a keyboard interrupt
  2752.     DV 2.42 does not provide this call to XDI handlers running inside a
  2753.       window; instead, it directly calls the INT 2F handler which was
  2754.       active at the time DV started
  2755. SeeAlso: INT 15/AX=DE26h,INT 15/AX=DE2Fh
  2756. --------Q-2FDE0B-----------------------------
  2757. INT 2F C - DESQview v2.26+ External Dev Interface - DVP PROCESSING COMPLETE
  2758.     AX = DE0Bh
  2759.     BX = mapping context of DESQview system task
  2760.     CX = number of system memory paragraphs required for the use of all
  2761.           XDI drivers (DV will add this to system memory in DVP buffer)
  2762.     DX = handle of DESQview system task
  2763.     SI = mapping context of new process if it starts
  2764.     ES:DI -> DVP buffer
  2765. Return: CX incremented as needed
  2766. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  2767.     driver should pass this call to previous handler before processing it
  2768. --------Q-2FDE0C-----------------------------
  2769. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP OUT PROCESS
  2770.     AX = DE0Ch
  2771.     BX = mapping context of task being swapped out
  2772.           (see #0315 at INT 15/AX=1016h)
  2773.     DX = handle of DESQview system task
  2774. Note:    driver should pass this call to previous handler after processing it
  2775. --------Q-2FDE0D-----------------------------
  2776. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP IN PROCESS
  2777.     AX = DE0Dh
  2778.     BX = mapping context of process just swapped in
  2779.           (see #0315 at INT 15/AX=1016h)
  2780.     DX = handle of DESQview system task
  2781. Note:    driver should pass this call to previous handler before processing it
  2782. --------Q-2FDE0E-----------------------------
  2783. INT 2F C - DESQview v2.26+ External Dev Interface - DVP START FAILED
  2784.     AX = DE0Eh
  2785.     BX = mapping context of DESQview system task
  2786.     DX = handle of DESQview system task
  2787.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  2788. Note:    driver should pass this call to previous handler after processing it
  2789. --------Q-2FDE0F-----------------------------
  2790. INT 2F C - DESQview v2.50+ External Dev Interface - INITIALIZE DV
  2791.     AX = DE0Fh
  2792. Note:    DESQview 2.50+ calls this function just before it completes its
  2793.       initialization.  At the time of the call, DESQview has not yet
  2794.       changed any interrupt vectors
  2795. SeeAlso: AX=DE02h
  2796. --------Q-2FDE10-----------------------------
  2797. INT 2F C - DESQview v2.50+ External Dev Interface - FREE TASK
  2798.     AX = DE10h
  2799.     BX = mapping context of process (see #0315 at INT 15/AX=1016h)
  2800.     DX = task handle of process
  2801. Note:    DESQview 2.50+ calls this function before it frees the task; it is
  2802.       similar to AX=DE07h but allows the XDI handler to make calls which
  2803.       cause context switches
  2804. SeeAlso: AX=DE06h,AX=DE07h
  2805. --------c-2FDF00-----------------------------
  2806. INT 2F - HyperWare programs - INSTALLATION CHECK
  2807.     AX = DF00h
  2808.     BX = product code (see #2256)
  2809.     CX = 0000h
  2810.     DX = 0000h
  2811. Return: AL = status
  2812.         00h not installed
  2813.         FFh multiplex number in use
  2814.         CX = 5948h ('YH') if selected product installed
  2815.         ---HyperDisk---
  2816.         BX = code segment of resident portion
  2817.         DX = HyperDisk local data version
  2818. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  2819. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  2820. SeeAlso: INT 13/AX=8EEDh
  2821. Index:    installation check;HyperDisk|installation check;HyperStb
  2822. Index:    installation check;HyperKey|installation check;HyperScreen
  2823. Index:    HyperDisk;installation check|HyperStb;installation check
  2824. Index:    HyperKey;installation check|HyperScreen;installation check
  2825.  
  2826. (Table 2256)
  2827. Values for HyperWare product code:
  2828.  4248h    ('BH') HyperStb
  2829.  4448h    ('DH') HyperDisk v4.20+
  2830.  4B48h    ('KH') HyperKey
  2831.  5348h    ('SH') HyperScreen
  2832. --------Q-2FDF00BX5445-----------------------
  2833. INT 2F U - Quarterdeck TELTSR.COM - INSTALLATION CHECK
  2834.     AX = DF00h
  2835.     BX = 5445h ('TE')
  2836.     CX = 4C54h ('LT')
  2837.     DX = 5352h ('SR')
  2838. Return: BX = 5454h ('TT') if installed
  2839.     CX = 494Eh ('IN') if installed
  2840.     DX = 5454h ('ST') if installed
  2841. Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
  2842.       which provides an INT 14h interface to the network
  2843. Range:    AH=DEh to AH=FFh and AH=C0h to AH=DDh, selected by scanning
  2844. SeeAlso: AX=DF01h"TELTSR",AX=DF02h"TELTSR",INT 14/AH=56h
  2845. --------N-2FDF01BX0000-----------------------
  2846. INT 2F U - MSG.COM - INSTALLATION CHECK
  2847.     AX = DF01h
  2848.     BX = 0000h
  2849. Return: AX = FDFFh if installed
  2850.        BX = segment of resident code
  2851. Program: MSG.COM is a TSR for intercepting incoming Novell broadcast
  2852.       messages written by Gary Dobbins (Dobbins@Arizona.Edu)
  2853. --------c-2FDF01BX4448-----------------------
  2854. INT 2F - HyperDisk v4.50+ - GET CURRENT CACHE STATE
  2855.     AX = DF01h
  2856.     BX = 4448h ('DH')
  2857. Return: AX = 0000h if function supported
  2858.         BX = number of cache buffers in use
  2859.         CX = number of cache buffers which have been modified
  2860.         DL = caching flags (see #2257)
  2861. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  2862. SeeAlso: AX=DF00h,AX=DF02h
  2863.  
  2864. Bitfields for HyperDisk caching flags:
  2865. Bit(s)    Description    (Table 2257)
  2866.  0    staged writes enabled for floppy disks
  2867.  1    staged writes enabled for hard disks
  2868.  2    writes verified on floppy disks
  2869.  3    writes verified on hard disks
  2870.  4    reserved (0)
  2871.  5    reserved (0)
  2872.  6    floppy caching enabled
  2873.  7    all caching functions enabled
  2874. --------Q-2FDF01-----------------------------
  2875. INT 2F U - Quarterdeck TELTSR.COM - CLOSE CONNECTION
  2876.     AX = DF01h
  2877. Return: nothing???
  2878. Note:    invokes the DESQview/X socket API (see INT 15/AX=DE2Eh) function 0006h
  2879.       to close the socket corresponding to the file handle set with
  2880.       AX=DF02h; NOP if no file handle was ever set
  2881. SeeAlso: AX=DF00h"TELTSR",AX=DF02h"TELTSR"
  2882. --------c-2FDF02BX4448-----------------------
  2883. INT 2F - HyperDisk v4.50+ - SET CACHE STATE
  2884.     AX = DF02h
  2885.     BX = 4448h ('DH')
  2886.     DL = new caching flags (see #2257)
  2887. Return: AX = 0000h if supported
  2888.         BX = number of cache buffers in use
  2889.         CX = number of cache buffers which have been modified
  2890.         DL = previous caching flags (see #2257)
  2891. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  2892. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  2893. SeeAlso: AX=DF00h,AX=DF01h
  2894. --------Q-2FDF02-----------------------------
  2895. INT 2F U - Quarterdeck TELTSR.COM - OPEN CONNECTION
  2896.     AX = DF02h
  2897.     BX = file handle for connection's socket
  2898. Return: AX = status
  2899.         0000h successful
  2900.         FFFFh no more room in TELTSR's JFT
  2901. Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
  2902. Notes:    the indicated file handle becomes owned by TELTSR, and is closed in
  2903.       the caller's JFT
  2904.     multiple calls to this function will override the previous assignment
  2905.       without closing the previous file; use AX=DF01h before further calls
  2906. SeeAlso: AX=DF00h"TELTSR",AX=DF01h"TELTSR"
  2907. --------U-2FE000-----------------------------
  2908. INT 2F - SETDRVER.COM v2.10+ - INSTALLATION CHECK
  2909.     AX = E000h
  2910. Return: AX = 4A52h ("JR") if present
  2911. Program: SETDRVER is a public domain TSR by Jacob Rieper which sets the
  2912.       apparent DOS version analogously to MS-DOS SETVER
  2913. Note:    this installation check differs from the usual one of returning AL=FFh
  2914. SeeAlso: AX=E001h,INT 21/AH=52h
  2915. --------j-2FE000-----------------------------
  2916. INT 2F - KAOSHIDE - INSTALLATION CHECK
  2917.     AX = E000h
  2918. Return: AL = FFh if installed
  2919. Program: KAOSHIDE ('Hidden Kaos') is a PD joke TSR which randomly capitalizes
  2920.       alphabetic keys, written by Philip Maland. Although not a virus,
  2921.       v2.0 uses some viral-like techniques to hide itself from
  2922.       memory-reports by reducing DOS memory size.
  2923. --------K-2FE000DX5354-----------------------
  2924. INT 2F - StuffIt v3.21+ - INSTALLATION CHECK
  2925.     AX = E000h
  2926.     DX = 5354h ("ST")
  2927. Return: AL = FFh if installed
  2928.         BX = version (BH = major, BL = BCD minor)
  2929.         DX = segment of resident code
  2930. Program: StuffIt is a freeware delayed keyboard stuffer by Terje Mathisen
  2931. --------U-2FE001-----------------------------
  2932. INT 2F - SETDRVER.COM v2.10+ - GET SETDRVER VERSION
  2933.     AX = E001h
  2934. Return: AH = major version
  2935.     AL = minor version
  2936. SeeAlso: AX=E000h
  2937. --------U-2FE002-----------------------------
  2938. INT 2F - SETDRVER.COM v2.10+ - GET ORIGINAL DOS VERSION INFO
  2939.     AX = E002h
  2940. Return: AL = FFh if successful
  2941.         BH = major DOS version
  2942.         BL = minor DOS version
  2943.         CH = DOS version flag
  2944.         CL = OEM number
  2945.         DH = major DR DOS version number (FFh if unknown)
  2946.         DL = minor DR DOS version number (FFh if unknown)
  2947. SeeAlso: AX=E003h,AX=E007h,INT 21/AH=30h
  2948. --------U-2FE003-----------------------------
  2949. INT 2F - SETDRVER.COM v2.10+ - RESET INTERNAL VARIABLES
  2950.     AX = E003h
  2951.     BH = new major DOS version
  2952.     BL = new minor DOS version
  2953.     CH = new DOS version flag
  2954.     CL = new DOS revision number
  2955.     DH = new OEM number
  2956. SeeAlso: AX=E002h
  2957. --------U-2FE004-----------------------------
  2958. INT 2F - SETDRVER.COM v2.10+ - ENABLE TSR
  2959.     AX = E004h
  2960. Return: AL = FFh if successful
  2961. SeeAlso: AX=E000h,AX=E005h,AX=E006h
  2962. --------U-2FE005-----------------------------
  2963. INT 2F - SETDRVER.COM v2.10+ - DISABLE TSR
  2964.     AX = E005h
  2965. Return: AL = FFh if successful
  2966. SeeAlso: AX=E000h,AX=E004h,AX=E006h
  2967. --------U-2FE006-----------------------------
  2968. INT 2F - SETDRVER.COM v2.10+ - GET TSR STATUS
  2969.     AX = E006h
  2970. Return: AL = FFh if successful
  2971.         BL = status
  2972.         01h resident and active
  2973.         02h resident and inactive
  2974. --------U-2FE007-----------------------------
  2975. INT 2F - SETDRVER.COM v2.10+ - GET TaskMAX STATUS AT INSTALLATION
  2976.     AX = E007h
  2977. Return: AL = FFh if successful
  2978.         BL = status
  2979.         00h if TaskMAX not loaded before SETDRVER
  2980.         FFh if TaskMAX was loaded before SETDRVER
  2981. SeeAlso: AX=E003h
  2982. --------U-2FE0-------------------------------
  2983. INT 2F - SETDRVER.COM - RESERVED FOR FUTURE USE
  2984.     AH = E0h
  2985.     AL = 08h-10h
  2986. --------K-2FE100-----------------------------
  2987. INT 2F - Phantom2 v1.1+ - INSTALLATION CHECK
  2988.     AX = E100h
  2989. Return: AX = 0001h if installed
  2990.         DS:SI -> ASCIZ hotkey name
  2991.         DS:DI -> ASCIZ recording filename
  2992. Program: Phantom of the Keyboard II is a shareware keystroke recorder/replayer
  2993.       by P2 Enterprises
  2994. SeeAlso: AX=E101h,AX=E102h,AX=E103h,AX=E300h
  2995. Index:    hotkeys;Phantom2
  2996. --------K-2FE101-----------------------------
  2997. INT 2F - Phantom2 v1.1+ - FUNCTION REQUEST
  2998.     AX = E101h
  2999.     BX = function mask (see #2258)
  3000.     CX = code for hotkey (as returned by INT 16/AH=00h) if BX bit 6 set
  3001.     DS:DX -> ASCIZ filespec if BX bit 7 set
  3002. SeeAlso: AX=E100h
  3003. Index:    hotkeys;Phantom2
  3004.  
  3005. Bitfields for Phantom2 function mask:
  3006. Bit(s)    Description    (Table 2258)
  3007.  0    record
  3008.  1    play
  3009.  2    QuickPlay
  3010.  3    loop
  3011.  4    mode display toggle
  3012.  5    sound toggle
  3013.  6    set hotkey
  3014.  7    set filespec
  3015. --------K-2FE102-----------------------------
  3016. INT 2F - Phantom2 v1.1+ - UNINSTALL
  3017.     AX = E102h
  3018. Return: AX = status
  3019.         0001h removal successful
  3020.         0002h not installed as TSR
  3021.         FFFFh disabled but not removed
  3022. SeeAlso: AX=E100h
  3023. --------K-2FE103-----------------------------
  3024. INT 2F - Phantom2 v2.8 - SET ??? FLAG
  3025.     AX = E103h
  3026. Return: AX = 0001h
  3027. SeeAlso: AX=E100h
  3028. --------y-2FE200-----------------------------
  3029. INT 2F - SecureDevice - LOGIN TO DRIVE
  3030.     AX = E200h
  3031.     DL = drive number (0 = A:)
  3032.     DS:SI -> 104-byte key
  3033. Return: AL = status
  3034.         00h unable to determine key's validity
  3035.         01h key is valid
  3036.         FFh key is invalid
  3037. Program: SecureDevice is a copylefted device driver by Max Loewenthal and
  3038.       Arthur Helwig which turns one or more disk files into encrypted
  3039.       logical drives
  3040. SeeAlso: AX=E201h,AX=E203h,AX=E209h
  3041. --------y-2FE201-----------------------------
  3042. INT 2F - SecureDevice - GET INFORMATION
  3043.     AX = E201h
  3044.     DX = driver index (0000h = first loaded)
  3045. Return: AL = number of volumes handled by driver
  3046.     DL = drive number of first volume (00h = A:)
  3047. SeeAlso: AX=E200h,AX=E203h,AX=E209h
  3048. --------y-2FE203-----------------------------
  3049. INT 2F - SecureDevice - DESTROY PASSWORD (LOGOUT FROM DRIVE)
  3050.     AX = E203h
  3051.     DL = drive number (00h = A:) or FFh for all drives
  3052. Return: nothing
  3053. SeeAlso: AX=E200h,AX=E209h
  3054. --------y-2FE209DX0000-----------------------
  3055. INT 2F - SecureDevice - INSTALLATION CHECK
  3056.     AX = E209h
  3057.     DX = 0000h
  3058. Return: AX = 1DEAh if installed
  3059.         DX = number of drivers installed
  3060. --------K-2FE300-----------------------------
  3061. INT 2F - ANARKEY.COM - INSTALLATION CHECK
  3062.     AX = E300h
  3063. Return: AL = state
  3064.         00h not installed
  3065.         FEh if installed but suspended (v3.0+)
  3066.         FFh installed
  3067. Program: ANARKEY.COM is a commandline recall program by Steven Calwas
  3068. Range:    AH=C0h to AH=FFh, selected by commandline switch
  3069. SeeAlso: AX=E100h,AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h
  3070. SeeAlso: AX=E307h,INT 66"Newkey"
  3071. --------V-2FE300-----------------------------
  3072. INT 2F - Blank - INSTALLATION CHECK
  3073.     AX = E300h
  3074. Return: AL = FFh if installed
  3075.         ES = resident code segment
  3076. Program: Blank is a shareware screen blanker by Yonah Schmeidler
  3077. Note:    AH=E3h is the default, which may be reconfigured by the installation
  3078.       program in the registered version
  3079. SeeAlso: AH=93h,AX=C050h,INT 14/AX=AA01h
  3080. Index:    screen saver;Blank
  3081. --------K-2FE301-----------------------------
  3082. INT 2F U - ANARKEY.COM v2+ - GET ???
  3083.     AX = E301h
  3084. Return: DX:BX -> ??? (see #2259,#2260)
  3085. SeeAlso: AX=E300h
  3086.  
  3087. Format of returned data structure for ANARKEY v2.0:
  3088. Offset    Size    Description    (Table 2259)
  3089.  -7   7 BYTEs    signature ('ANARKEY')
  3090.  00h    WORD    ??? (I see 0001h in v2.0)
  3091.  02h    WORD    ??? (I see 0001h in v2.0)
  3092.  04h    WORD    ??? (I see 0 in v2.0)
  3093.  06h    WORD    PSP segment of next program loaded
  3094.  
  3095. Format of returned data structure for ANARKEY v3+:
  3096. Offset    Size    Description    (Table 2260)
  3097.  -1    BYTE    multiplex number
  3098.  00h    WORD    ??? (I see 0001h in v3.0-4.0)
  3099.  02h    WORD    ??? (I see 0001h in v3.0-4.0)
  3100.  04h    BYTE    ??? (I see 0 in v3.0-4.0)
  3101.  05h    WORD    PSP segment of next program loaded
  3102. --------K-2FE302-----------------------------
  3103. INT 2F U - ANARKEY.COM v3+ - ???
  3104.     AX = E302h
  3105.     BL = ???
  3106. Return: ???
  3107. SeeAlso: AX=E300h
  3108. --------K-2FE303-----------------------------
  3109. INT 2F U - ANARKEY.COM v3+ - ANARKMD API
  3110.     AX = E303h
  3111.     BL = function
  3112.         01h toggle insert mode
  3113.         02h display contents of history buffer
  3114.         03h write history buffer to file
  3115.         ES:DX -> file name
  3116.         04h clear history buffer
  3117.         05h undefine all aliases
  3118.         06h show aliases
  3119.         07h list programs using Unix switchar
  3120.         08h jump to bottom of history buffer
  3121.         09h (v4.0) add string to history buffer
  3122.         ES:DX -> ASCIZ string
  3123.         0Ah (v4.0) ???
  3124.         ES:DX -> ???
  3125.         0Bh (v4.0) copy string to edit buffer for use as next input line
  3126.         ES:DX -> ASCIZ string
  3127.         0Ch (v4.0) ???
  3128.         0Dh (v4.0) copy ??? to ???
  3129.         0Eh (v4.0) ???
  3130.         0Fh (v4.0) ???
  3131.         10h (v4.0) set ??? flag
  3132.         11h (v4.0) display error message about running in EMS under Windows
  3133. Return: ???
  3134. SeeAlso: AX=E300h
  3135. --------K-2FE304-----------------------------
  3136. INT 2F U - ANARKEY.COM v2+ - ???
  3137.     AX = E304h
  3138.     BL = ???
  3139. Return: ???
  3140. SeeAlso: AX=E300h
  3141. --------K-2FE305-----------------------------
  3142. INT 2F U - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY
  3143.     AX = E305h
  3144.     BL = new state
  3145.         01h suspended
  3146.         00h enabled
  3147. SeeAlso: AX=E300h
  3148. --------K-2FE306-----------------------------
  3149. INT 2F U - ANARKEY.COM v4.0 - GET ???
  3150.     AX = E306h
  3151. Return: AX = ???
  3152. SeeAlso: AX=E300h
  3153. --------K-2FE307-----------------------------
  3154. INT 2F U - ANARKEY.COM v4.0 - GET ???
  3155.     AX = E307h
  3156. Return: AX = ???
  3157.     BL = ???
  3158. SeeAlso: AX=E300h
  3159. --------K-2FE337-----------------------------
  3160. INT 2F - INT16.COM - INSTALLATION CHECK
  3161.     AX = E337h
  3162. Return: AX = 0013h if installed
  3163. Program: INT16.COM is an INT16 keyboard BIOS replacement for
  3164.           INT 16/AH=00h-02h,10h-12h (based on K3) written by Martin Gerdes
  3165.       and published in c't 05/1990.
  3166. SeeAlso: AX=ED58h
  3167. --------l-2FE44D-----------------------------
  3168. INT 2F - NDOS - API
  3169.     AX = E44Dh
  3170. Program: NDOS is a version of 4DOS licensed to Symantec for inclusion in the
  3171.       Norton Utilities
  3172. Note:    as NDOS is a licensed version of 4DOS v3.03, the API is identical to
  3173.       that for 4DOS, except that AH=E4h instead of D4h and the installation
  3174.       check returns AX=44EEh instead of AX=44DDh
  3175. SeeAlso: AX=D44Dh,AX=E44Eh
  3176. --------l-2FE44E-----------------------------
  3177. INT 2F C - NDOS - AWAITING USER INPUT
  3178.     AX = E44Eh
  3179.     BX = condition
  3180.         0000h NDOS is ready to display prompt
  3181.         0001h NDOS has displayed the prompt, about to accept user input
  3182. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  3183. SeeAlso: AX=E44Dh
  3184. --------K-2FE44FBX0000-----------------------
  3185. INT 2F - NDOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  3186.     AX = E44Fh
  3187.     BX = 0000h
  3188. Return: AX = 44EEh if installed
  3189. Program: NDOS is a version of 4DOS licensed to Symantec for inclusion in the
  3190.       Norton Utilities
  3191. Note:    this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  3192.       which emulate the 4DOS and NDOS keystack
  3193. SeeAlso: AX=D44Fh/BX=0000h,AX=E44Fh/BX=0001h
  3194. --------K-2FE44FBX0001-----------------------
  3195. INT 2F - NDOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  3196.     AX = E44Fh
  3197.     BX = 0001h
  3198.     CX = number of keystrokes (01h-FFh)
  3199.     DS:DX -> keystroke list (one word per keystroke)
  3200. Return: AX = status
  3201.         0000h successful
  3202.         nonzero failed
  3203.     BX,CX,DX destroyed
  3204. Notes:    the keystrokes are the exact values to return from subsequent calls to
  3205.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  3206.         0000h causes subfunctions 01h and 11h to indicate an empty
  3207.               keyboard buffer
  3208.         FFFFh is followed by a word indicating the number of clock
  3209.               ticks to delay before the next faked keystroke
  3210.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  3211.       invocation, and does not range-check CX; it will overwrite memory
  3212.       following the resident portion if CX is greater than 100h.
  3213.     this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  3214.       which emulate the 4DOS and NDOS keystack
  3215. SeeAlso: AX=E44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h
  3216. --------f-2FE77EBX0000-----------------------
  3217. INT 2F - CTDEMN - INSTALLATION CHECK
  3218.     AX = E77Eh
  3219.     BX = 0000h
  3220.     CX = 4F4Dh ('OM')
  3221.     DX = 5453h ('TS')
  3222. Return: AX = 7EE7h if installed
  3223.         BX = resident code segment
  3224.         CX = 6F6Dh ('om')
  3225.         DX = 7473h ('ts')
  3226. Program: CTDEMN is a file daemon TSR by Simultan AG
  3227. --------E-2FED00-----------------------------
  3228. INT 2F - Phar Lap DOS EXTENDERS - INSTALLATION CHECK
  3229.     AX = ED00h
  3230.     BL = DOS extender ID (see #2261)
  3231. Return: AL = status
  3232.         00h not installed
  3233.         FFh installed
  3234.         SI = 5048h ("PH")
  3235.         DI = 4152h ("AR")
  3236.         CH = major version number
  3237.         CL = minor version number
  3238.         DX = flags
  3239.             bit 0: running under DPMI
  3240.             bit 1: running under Phar Lap VMM
  3241.         if running under DPMI:
  3242.             BX = DPMI version (BH = major, BL = minor)
  3243. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h
  3244.  
  3245. (Table 2261)
  3246. Values for Phar Lap DOS extender ID:
  3247.  01h    286dosx v1.3+ (Software Development Kit)
  3248.  02h    286dosx v1.3+ (Run-Time Kit)
  3249.  03h    386dosx v4.0+ (SDK)
  3250.  04h    386dosx v4.0+ (RTK)
  3251. --------E-2FED03-----------------------------
  3252. INT 2F R - Phar Lap 386/DOS-Extender v4.1 - GET EXTENDER ENTRY POINT
  3253.     AX = ED03h
  3254.     CX = real-mode code segment
  3255.     DX = real-mode data segment
  3256. Return: CF clear if successful
  3257.         CX = protected-mode code segment selector
  3258.         DX = protected-mode data segment selector
  3259.         ES:DI -> real-mode entry point for calling protected-mode functions
  3260.               (see INT 21/AX=250Dh)
  3261.     CF set on error
  3262.         AX = error code
  3263.         0008h unable to allocate LDT descriptors
  3264. --------E-2FED10BL05-------------------------
  3265. INT 2F - Pharlap DOS Extender - ???
  3266.     AX = ED10h
  3267.     BL = 05h
  3268.     ES:SI -> ??? structure
  3269. Return:    AX = ???
  3270.     SI = ???
  3271.     DI = ???
  3272. SeeAlso: AX=ED00h,AX=ED11h
  3273. --------E-2FED11BL05-------------------------
  3274. INT 2F - Pharlap DOS Extender - FATAL EXIT TO REAL MODE ???
  3275.     AX = ED11h
  3276.     BL = 05h
  3277.     CX = ???
  3278.     DX = ???
  3279.     ES:SI -> ??? structure
  3280.     SS:SP = new stack ???
  3281. Return: ???
  3282. Note:    called immediately prior to terminating program with INT 21/AX=4CFFh
  3283. SeeAlso: AX=ED00h,AX=ED10h
  3284. --------K-2FED58-----------------------------
  3285. INT 2F U - K5.COM - INSTALLATION CHECK
  3286.     AX = ED58h
  3287. Return: AX = 000Dh if installed
  3288.         ES = resident code segment
  3289.         BX = ??? (9999h)
  3290.         ???
  3291. Program: K5 is an extended keyboard driver by Martin Gerdes, based on his K3
  3292. SeeAlso: AX=E337h,INT 16/AX=AF20h
  3293. --------E-2FED80-----------------------------
  3294. INT 2F - Phar Lap 286|DOS Extender Lite v2.5 - ???
  3295.     AX = ED80h
  3296.     BL = DOS extender ID (see #2261)
  3297.     SI = 5048h ("PH")
  3298.     DI = 4152h ("AR")
  3299.     ???
  3300. Return: ???
  3301. --------O-2FEDC8BX0000-----------------------
  3302. INT 2F - Novell ??? - INSTALLATION CHECK???
  3303.     AX = EDC8h ('EDC' = Novell European Development Center)
  3304.     BX = 0000h
  3305.     CX = 0000h
  3306.     DX = 1234h
  3307. Return: ???
  3308. Desc:    called by Novell DOS 7 LOCK command during installation; purpose
  3309.       unknown
  3310. --------y-2FEE00-----------------------------
  3311. INT 2F - GRIDLOC.EXE - INSTALLATION CHECK
  3312.     AX = EE00h
  3313. Return: AL = FFh if installed
  3314. Program: GRIDLOC is a PC security program by Intelligent Security Systems, Inc.
  3315. SeeAlso: INT 21/AH=40h"NB.SYS"
  3316. --------U-2FEE00-----------------------------
  3317. INT 2F - XVIEW - INSTALLATION CHECK
  3318.     AX = EE00h
  3319. Return: AX = 00FFh if installed
  3320. Program: XVIEW is a hypertext viewer by Flambeaux Software, Inc.
  3321. --------N-2FEE00-----------------------------
  3322. INT 2F - WEB v4.02 - INSTALLATION CHECK
  3323.     AX = EE00h
  3324. Return: AL = status
  3325.         00h not installed
  3326.         FFh installed
  3327. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  3328. SeeAlso: AH=EEh"WEB",AX=EEF0h
  3329. --------U-2FEE01-----------------------------
  3330. INT 2F - XVIEW - POP UP GIVING TOPIC SEARCH KEYWORD
  3331.     AX = EE01h
  3332.     DS:DX -> ASCIZ string containing case-insensitive keyword to look up
  3333. Return: AX = status (see #2262)
  3334. Note:    the specified keyword should be a hyperlink in the _IndexPage of some
  3335.       database; the current database is searched first
  3336. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE03h,AX=EE04h,AX=EE06h
  3337.  
  3338. (Table 2262)
  3339. Values for XVIEW function status:
  3340.  0000h    successful
  3341.  00F1h    unknown subfunction
  3342.  00F2h    unable to pop up
  3343. --------U-2FEE02-----------------------------
  3344. INT 2F - XVIEW - POP UP GIVING A PAGE NUMBER
  3345.     AX = EE02h
  3346.     DX = physical page number or anchor page number (see #2263)
  3347. Return: AX = status (see #2262)
  3348. Note:    physical page numbers are assigned by the hypertext compiler, and
  3349.       will change if a page is inserted in the middle
  3350. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE05h,AX=EE06h
  3351.  
  3352. (Table 2263)
  3353. Values for XVIEW anchor page number:
  3354.  FFEAh    _Credits
  3355.  FFECh    _SearchTopics
  3356.  FFEDh    _SearchText
  3357.  FFF0h    _ManualList
  3358.  FFF5h    _HelpOnHelp
  3359.  FFF8h    _HomePage
  3360.  FFF9h    _IndexPage
  3361. --------U-2FEE03-----------------------------
  3362. INT 2F - XVIEW - POP UP GIVING FILENAME AND SEARCH TOPIC OR PAGE NUMBER
  3363.     AX = EE03h
  3364.     DS:DX -> data packet (see #2264)
  3365. Return: AX = status (see #2262)
  3366. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE06h
  3367.  
  3368. Format of XVIEW data packet:
  3369. Offset    Size    Description    (Table 2264)
  3370.  00h    DWORD    -> ASCIZ database filespec (0000h:0000h for current database)
  3371.  04h    DWORD    -> ASCIZ text to look up or 0000h:0000h
  3372.  08h    WORD    page number (0000h if keyword used)
  3373.  0Ah  6 BYTEs    reserved
  3374. --------U-2FEE04-----------------------------
  3375. INT 2F - XVIEW - POP UP AND READ SCREEN FOR SEARCH TOPIC KEYWORD
  3376.     AX = EE04h
  3377. Return: AX = status (see #2262)
  3378. Note:    equivalent to the action taken when the user presses the Alt-L hotkey
  3379. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE03h,AX=EE06h
  3380. --------U-2FEE05-----------------------------
  3381. INT 2F - XVIEW - POP UP TO MOST-RECENTLY VIEWED PAGE
  3382.     AX = EE05h
  3383. Return: AX = status (see #2262)
  3384. Note:    equivalent to the action taken when the user presses the Alt-H hotkey
  3385. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE06h
  3386. --------U-2FEE06-----------------------------
  3387. INT 2F - XVIEW - WAIT FOR POP-DOWN AND GET EXIT CODE
  3388.     AX = EE06h
  3389. Return: AX = status (see also AX=EE01h)
  3390.         0001h specified filename is not an xText database
  3391.         0002h no databases found
  3392.         0003h bad data in file
  3393.         0004h memory shortage
  3394.         0005h unable to open the requested file
  3395.         0007h invalid page number for file
  3396. Note:    although this call is not required, the exit code can alert the
  3397.       caller to problems; if the call is not made, the program should
  3398.       enforce a delay of about 1/2 second to allow the viewer to pop up,
  3399.       and should not get keyboard input or attempt disk accesses during
  3400.       the delay
  3401. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE03h,AX=EE04h,AX=EE05h
  3402. --------N-2FEE-------------------------------
  3403. INT 2F - WEB v4.02 - WEB MODULE INSTALLATION CHECK
  3404.     AH = EEh
  3405.     AL = module ID (see #2265)
  3406. Return: AX = 0000h if installed
  3407.         ES:DI -> far entry point for module-specific API calls
  3408.           (see #2266,#2267,#2268,#2269,#2270)
  3409. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  3410. SeeAlso: AX=EE00h"WEB"
  3411.  
  3412. (Table 2265)
  3413. Values for WEB module ID:
  3414.  10h    server module (SERVER.EXE)
  3415.  20h    client module (CLIENT.EXE)
  3416.  30h    mail module (MAIL.EXE)
  3417.  40h    spooler (PCSPOOL.EXE)
  3418.  50h    kernel module (KERNEL.EXE)
  3419.  60h    SAP module (KERNEL.EXE)
  3420.  70h    resident station manager (SM.EXE)
  3421.  90h    router module (ROUTER.EXE)
  3422.  
  3423. (Table 2266)
  3424. Call server module entry point with:
  3425.     BX = function
  3426.         0000h remove server module
  3427.         Return: AX = status (0000h if successful, else WEB error code)
  3428.         0001h create SYSINFO file
  3429.         Note:    the SYSINFO file is used by the station manager when
  3430.               displaying info for a particular station
  3431.         0002h get server object table
  3432.         Return: CX = number of server objects
  3433.             ES:DI -> server object table
  3434.         Note:    server objects include drives and devices that the
  3435.               server module controls
  3436.         0003h get server variables
  3437.         Return: ES:DI -> server variables
  3438.  
  3439. (Table 2267)
  3440. Call client module entry point with:
  3441.     BX = function
  3442.         0000h remove client module
  3443.         Return: AX = status (0000h if successful, else WEB error code)
  3444.         0001h decrement client-only flag
  3445.         0002h increment client-only flag
  3446.         0005h set device capture
  3447.         Note:    decrements DeviceOutput flag, telling the spooler that
  3448.               it may trap device output again
  3449.         0006h clear device capture
  3450.         Note:    increments DeviceOutput flag, telling the spooler that
  3451.               it should not trap device output (this is used
  3452.               internally by the spooler to prevent it from trapping
  3453.               its own output)
  3454.         0007h get client debug pointer
  3455.         Return: ES:DI -> client debug data structure (see #2271)
  3456.         0008h get root drive
  3457.         Return: AL = WEB startup drive
  3458.         0009h get maximum possible drive/device redirections
  3459.         Return: AL = maximum drive redirections
  3460.             CH = maximum LPTx redirections
  3461.             CL = maximum COMx redirections
  3462.         000Ah suspend client
  3463.         Return: AX = previous value of Suspend flag
  3464.         000Bh resume client
  3465.         Return: AX = previous value of Suspend flag
  3466.         000Ch get instance data
  3467.         CX = maximum number of structures in array
  3468.         ES:DI -> buffer for array of WIN_INSTANCE_DATA structures
  3469.               (see #2272)
  3470.         Return: CX = number of structures actually returned
  3471.         Note:    used internally by WEB4WIN
  3472.  
  3473. (Table 2268)
  3474. Call mail module entry point with:
  3475.     BX = function
  3476.         0000h remove mail module
  3477.         Return: AX = status (0000h successful, else WEB error code)
  3478.         0001h set mail poll
  3479.         Note:    schedules the WEB mail module
  3480.         0002h set mail notify
  3481.         Note:    sets the Notify flag, which determines whether the
  3482.               user will be notified when mail is received
  3483.         0003h clear mail notify
  3484.         Note:    clears the Notify flag, which determines whether the
  3485.               user will be notified when mail is received
  3486.         0004h check whether new mail has arrived
  3487.         Return: AL = new mail status
  3488.                 00h no new mail since last call
  3489.                 else new mail has arrived
  3490.         Note:    also clears the new-mail flag after retrieving it
  3491.         0005h send notify
  3492.         ES:DI -> name of WEB user to be notified
  3493.         0006h get post office
  3494.         Return: ES:DI -> full network path of Post Office subdirectory
  3495.  
  3496. (Table 2269)
  3497. Call spooler entry point with:
  3498.     BX = function
  3499.         0000h remove PCSpool module
  3500.         Return: AX = status (0000h successful, else WEB error code)
  3501.         0001h set spooler poll
  3502.         Note:    schedules the WEB spooler
  3503.         0002h check spooler changed
  3504.         Return:    AX = 0000h
  3505.         Note:    this call is a NOP in current versions of WEB
  3506.  
  3507. (Table 2270)
  3508. Call kernel entry point with:
  3509.     BX = function
  3510.         0000h remove kernel module
  3511.         Return: AX = status (0000h successful, else WEB error code)
  3512.         0001h set kernel ^S filter
  3513.         DL = new state (00h don't filter ^S, nonzero do filter)
  3514.         0002h get kernel data area
  3515.         Return: ES:DI -> kernel data area
  3516.         0003h display dialog box
  3517.         CL = dialog box type
  3518.             00h password
  3519.             01h E-Note received notification
  3520.             02h Novell login
  3521.             03h general notification
  3522.         DL = number of rows to display
  3523.         ES:SI -> array of far pointers to rows to be displayed
  3524.         ES:DI -> Pascal-style input buffer
  3525.         Return: AX = status (0000h successful, else error code)
  3526.         0004h kernel service events
  3527.         0005h get kernel's in-critical-section flag
  3528.         Return: ES:DI -> kernel InCriticalSection flag
  3529.         0006h schedule DOS event
  3530.         AL = directive
  3531.             00h do not ignore WEB ExtraBusy flag
  3532.             01h ignore ExtraBusy flag
  3533.             02h (WEB4WIN) check that current Windows VM is foregrnd VM
  3534.         ES:SI -> WEB AES Event Control Block (ECB) (see #2273)
  3535.         Notes:    the WEB Asynchronous Event Scheduler is similar to the
  3536.               one used by IPX; this call schedules a special ECB
  3537.               to be executed at a later time.  Unlike IPX ECBs,
  3538.               the timeout must be set explicitly by the caller
  3539.             this function also calls function 0004h
  3540.         0007h check busy
  3541.         AL = directive
  3542.             00h do not ignore WEB ExtraBusy flag
  3543.             01h ignore ExtraBusy flag
  3544.             02h (WEB4WIN) check that current Windows VM is foregrnd VM
  3545.         Return: AX = status (0000h not busy, else busy)
  3546.         0008h set keyboard intercept
  3547.         Note:    currently a NOP which returns immediately
  3548.         0009h get keyboard intercept
  3549.         Note:    currently a NOP which returns immediately
  3550.         000Ah get dialog flags
  3551.         Return: ES:DI -> kernel dialog flags (see #2274)
  3552.         000Bh get network path
  3553.         Return: ES:DI -> fully-qualified network path of file where
  3554.                 the screen is stored on Dialog calls
  3555.         000Ch kernel alternate dialog
  3556.         CL = dialog box type
  3557.             00h password
  3558.             01h E-Note received notification
  3559.             02h Novell login
  3560.             03h general notification
  3561.         DL = number of rows to display
  3562.         ES:SI -> array of far pointers to rows to be displayed
  3563.         ES:DI -> Pascal-style input buffer
  3564.         Return: AX = status (0000h successful, else error code)
  3565.         Note:    this function is identical to function 0003h except
  3566.               that it does not notify WEB4WIN of the impending
  3567.               dialog request
  3568.         000Dh get machine/operating system type
  3569.         Return: AX = machine/operating system type
  3570.                 01h IBM PC, MS-DOS
  3571.                 02h IBM PC, DOSV (Japanese)
  3572.                 03h NEC PC-9800, JDOS (Japanese)
  3573.                 04h IBM PC, Korean DBC DOS
  3574.  
  3575. Format of client debug data structure:
  3576. Offset    Size    Description    (Table 2271)
  3577.  00h    WORD    total files
  3578.  02h    WORD    files free
  3579.  04h    WORD    no files
  3580.  06h    WORD    minimum files
  3581.  08h    WORD    total FCBs
  3582.  0Ah    WORD    total safe FCBs
  3583.  0Ch    WORD    FCBs in use
  3584.  0Eh    WORD    wrong FCB
  3585.  10h    WORD    compressed
  3586.  12h    WORD    retransmits
  3587.  
  3588. Format of WIN_INSTANCE_DATA structure:
  3589. Offset    Size    Description    (Table 2272)
  3590.  00h    DWORD    real-mode pointer to data to be instanced
  3591.  04h    WORD    size of data to be instanced
  3592.  
  3593. Format of WEB AES Event Control Block:
  3594. Offset    Size    Description    (Table 2273)
  3595.  00h    DWORD    link address
  3596.  04h    WORD    ESR address
  3597.  08h    BYTE    InUse flag
  3598.  09h    BYTE    completion code
  3599.  0Ah  3 BYTEs    reserved
  3600.  0Dh    WORD    timeout
  3601.  0Fh    BYTE    IgnoreExtra flag
  3602.  10h    WORD    PSP
  3603.  12h    DWORD    DTA
  3604.  16h    WORD    AX value for DOS critical information
  3605.  18h    WORD    BX value for DOS critical information
  3606.  1Ah    WORD    CX value for DOS critical information
  3607.  1Ch    WORD    DX value for DOS critical information
  3608.  
  3609. (Table 2274)
  3610. Values for kernel dialog flags:
  3611.  01h    dialog will timeout
  3612.  02h    display stars instead of entered keystrokes
  3613. --------N-2FEEF0-----------------------------
  3614. INT 2F - WEB v4.02 - WEB GENERAL NOTIFICATION
  3615.     AX = EEF0h
  3616.     BX = notification function ID (see #2275)
  3617. Return: varies by notification function
  3618. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  3619. Note:    the notification functions are used internally by WEB modules to notify
  3620.       other modules and external programs of actions or event, and should
  3621.       never be called by an application
  3622. SeeAlso: AX=EE00h"WEB"
  3623.  
  3624. (Table 2275)
  3625. Values for WEB Notification Function ID:
  3626.  00h    node added
  3627.  01h    node deleted
  3628.  02h    dial attempt
  3629.  03h    dial failed
  3630.  04h    file close
  3631.  05h    close connection
  3632.  07h    check Windows mode
  3633.  20h    link up
  3634.  21h    link down
  3635. --------K-2FF000-----------------------------
  3636. INT 2F U - 4MAP - INSTALLATION CHECK
  3637.     AX = F000h
  3638. Return: AX = 00FFh
  3639. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  3640. Note:    returns AX=00FFh for any value of AL not listed here
  3641. SeeAlso: AX=D44Dh,AX=F001h,AX=F002h
  3642. --------K-2FF001-----------------------------
  3643. INT 2F U - 4MAP - GET KEY MAPPINGS
  3644.     AX = F001h
  3645. Return: ES:BX -> key mappings
  3646. SeeAlso: AX=F000h
  3647. --------K-2FF002-----------------------------
  3648. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  3649.     AX = F002h
  3650.     BL = character to insert
  3651. Return: AX = status
  3652.         0000h successful
  3653.         0001h buffer full
  3654. SeeAlso: AX=F000h,AX=F003h
  3655. --------K-2FF003-----------------------------
  3656. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  3657.     AX = F003h
  3658.     BL = character to insert
  3659. Return: AX = status
  3660.         0000h successful
  3661.         0001h buffer full
  3662. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  3663. SeeAlso: AX=F000h,AX=F002h
  3664. --------m-2FF1-------------------------------
  3665. INT 2F U - MIN-MEM v2.11 - INSTALLATION CHECK
  3666.     AH = F1h
  3667.     AL <> F1h
  3668. Return: AL = F1h if installed
  3669. Program: MIN-MEM is a shareware TSR manager by Biologic which permits up to 24
  3670.       popup TSRs to be loaded but swapped out to disk, EMS, or XMS.     One
  3671.       TSR at a time is brought back into memory at the user's request.
  3672. --------E-2FF100-----------------------------
  3673. INT 2F - DOS EXTENDER INSTALLATION CHECK
  3674.     AX = F100h
  3675. Return: AL = FFh if DOS extender present
  3676.         SI = 444Fh ("DO")
  3677.         DI = 5358h ("SX")
  3678. Note:    supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC
  3679. SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h
  3680. --------W-2FF200-----------------------------
  3681. INT 2F - WINX - INSTALLATION CHECK
  3682.     AX = F200h
  3683. Return: AX = 00FFh if installed
  3684. Program: WINX is a DOS/Windows utilities by Al Williams which can be used to
  3685.       launch Windows applications from a DOS Box; it was published in
  3686.       "DOS and Windows Protected Mode-Programming with DOS Extenders"
  3687.       (Addison-Wesley) and should not be confused with the Windows driver
  3688.       of the same name which is part of the DESQview/X package
  3689. --------W-2FF201-----------------------------
  3690. INT 2F - WINX - RETURN ADDRESS OF SERVER BUFFER
  3691.     AX = F201h
  3692. Return: AX = status
  3693.         FFFFh if WINX is busy processing a different request
  3694.         0000h if successful
  3695.         BX:CX = address of server buffer (see #2276)
  3696.  
  3697. Format of WINX server buffer:
  3698. Offset    Size    Description    (Table 2276)
  3699.  00h    BYTE    command/status
  3700.         00h buffer available
  3701.         01h buffer contains result
  3702.         02h change directory
  3703.         03h execute program
  3704.         FFh terminate windows portion of WINX
  3705.  01h  ? BYTEs    command (03h) or directory (02h)
  3706.   or
  3707.  01h    DWORD    result (01h)
  3708. --------W-2FF202-----------------------------
  3709. INT 2F - WINX - SET SERVER'S WORKING DIRECTORY
  3710.     AX = F202h
  3711.     BX:CX -> directory
  3712. Return: AX = status
  3713.         FFFFh if WINX is busy processing a different request
  3714.         0000h if successful
  3715. SeeAlso: AX=F200h,AX=F203h
  3716. --------W-2FF203-----------------------------
  3717. INT 2F - WINX - EXECUTE COMMAND
  3718.     AX = F203h
  3719.     BX:CX -> command
  3720. Return: AX = status
  3721.         0000h if successful
  3722.         FFFFh if WINX is busy processing a different request
  3723. SeeAlso: AX=F200h,AX=F202h
  3724. --------G-2FF400-----------------------------
  3725. INT 2F - FINDIRQ.COM - INSTALLATION CHECK
  3726.     AX = F400h
  3727. Return: AL = 01h if installed
  3728. Program: FINDIRQ is a program by Rick Knoblaugh published in the 9/28/93 issue
  3729.       of PC Magazine; when run as a TSR it can determine which IRQs are
  3730.       used only when a device is active
  3731. SeeAlso: AX=F401h
  3732. --------N-2FF401-----------------------------
  3733. INT 2F - PowerLAN - GET VERSION
  3734.     AX = F401h
  3735. Return: ES:BX -> WORD containing 100*version (in decimal)
  3736. Program: PowerLAN is by Performance Technology
  3737. --------G-2FF401CX5121-----------------------
  3738. INT 2F - FINDIRQ.COM - GET HOOKED INTERRUPTS
  3739.     AX = F401h
  3740.     CX = 5121h ('Q!')
  3741. Return: AX:DX -> hooked interrupt table (see #2277)
  3742. SeeAlso: AX=F400h
  3743.  
  3744. Format of FINDIRQ hooked interrupt table:
  3745. Offset    Size    Description    (Table 2277)
  3746.  00h    BYTE    1Ch
  3747.  01h    DWORD    FINDIRQ's INT 1C handler
  3748.  05h    DWORD    original INT 1C handler
  3749.  09h    BYTE    28h
  3750.  0Ah    DWORD    FINDIRQ's INT 28 handler
  3751.  0Eh    DWORD    original INT 28 handler
  3752.  12h    BYTE    2Fh
  3753.  13h    DWORD    FINDIRQ's INT 2F handler
  3754.  17h    DWORD    original INT 2F handler
  3755. --------d-2FF700-----------------------------
  3756. INT 2F - AUTOPARK.COM - INSTALLATION CHECK
  3757.     AX = F700h
  3758. Return: AL = state
  3759.         00h not installed
  3760.         FFh installed
  3761. Program: AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  3762. --------d-2FF701-----------------------------
  3763. INT 2F - AUTOPARK.COM - SET PARKING DELAY
  3764.     AX = F701h
  3765.     BX:CX = 32-bit count of 55ms timer ticks
  3766. --------d-2FF800CX4455-----------------------
  3767. INT 2F U - SuperStor PRO 2XON.COM - INSTALLATION CHECK
  3768.     AX = F800h
  3769.     CX = 4455h ("DU")
  3770.     DL = 45h ("E")
  3771. Return: AL = FFh if installed
  3772.         ES:BX -> ASCII signature "Universal Data Exchange"
  3773. Program: SuperStor is a disk-compression program by Addstor.
  3774. Note:    returns AX=0001h if AL is not 00h or 01h
  3775. SeeAlso: AX=1001h,AX=F801h
  3776. --------d-2FF801CX4455-----------------------
  3777. INT 2F U - SuperStor PRO 2XON.COM - UNINSTALL
  3778.     AX = F801h
  3779.     CX = 4455h ("DU")
  3780.     DL = 45h ("E")
  3781.     ES:BX = return address if successful
  3782. Return: at specified address if successfully removed from memory
  3783.     else
  3784.         AL = error code
  3785.         ???
  3786. Program: SuperStor is a disk-compression program by Addstor.
  3787. Note:    returns AX=0001h if AL is not 00h or 01h
  3788. SeeAlso: AX=1001h,AX=F800h
  3789. ----------2FFA00-----------------------------
  3790. INT 2F - Multiplex - ??? - INSTALLATION CHECK???
  3791.     AX = FA00h
  3792.     BX = ??? (0408h)
  3793.     CX = ??? (001Fh)
  3794.     DX = ??? (0102h)
  3795.     SI = ??? (5ACCh)
  3796.     DI = ??? (0632h)
  3797. Return: ???    
  3798. Note:    called by WinEmacs at startup
  3799. ----------2FFA00-----------------------------
  3800. INT 2F - Multiplex - ??? - INSTALLATION CHECK???
  3801.     AX = FA00h
  3802.     BX = ??? (03FCh)
  3803.     CX = ??? (003Fh)
  3804.     DX = ??? (00FFh)
  3805.     SI = ??? (5AA6h)
  3806.     DI = ??? (0620h)
  3807. Return: ???    
  3808. Note:    called by Matlab at startup
  3809. --------*-2FFB-------------------------------
  3810. INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL
  3811.     AH = FBh
  3812. SeeAlso: AX=FB42h/BX=0001h
  3813. --------f-2FFB-------------------------------
  3814. INT 2F U - Conner Backup Exec AUTORES - API
  3815.     AH = FBh
  3816.     BL = function number (00h-07h)
  3817.     ???
  3818. Return: ???
  3819. Program: AUTORES is a resident program launcher for unattended backups
  3820. --------a-2FFB00-----------------------------
  3821. INT 2F U - AutoBraille v1.1A - INSTALLATION CHECK
  3822.     AX = FB00h
  3823. Return: AX = 00FFh if installed
  3824. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3825. SeeAlso: INT 10/AX=3800h,INT 14/AX=F0F1h
  3826. --------U-2FFB00-----------------------------
  3827. INT 2F U - Jot-It! v1.50 - INSTALLATION CHECK
  3828.     AX = FB00h
  3829. Return: AX = FFFFh if installed
  3830.         BX = version (BCD, BH=major, BL=minor)
  3831. SeeAlso: AX=FB03h"Jot-It",AX=FB01h"Jot-It"
  3832. --------a-2FFB01-----------------------------
  3833. INT 2F U - AutoBraille v1.1A - ???
  3834.     AX = FB01h
  3835.     ???
  3836. Return: ???
  3837. --------U-2FFB01-----------------------------
  3838. INT 2F U - Jot-It! v1.50 - GET USER NAME
  3839.     AX = FB01h
  3840. Return: DX:BX -> ASCIZ user name
  3841. SeeAlso: AX=FB02h"Jot-It"
  3842. --------a-2FFB02-----------------------------
  3843. INT 2F U - AutoBraille v1.1A - ???
  3844.     AX = FB02h
  3845. Return: AH = ???
  3846.     AL = ???
  3847. --------U-2FFB02-----------------------------
  3848. INT 2F U - Jot-It! v1.50 - GET MESSAGE DIRECTORY
  3849.     AX = FB02h
  3850. Return: DX:BX -> ASCIZ name of directory in which messages are stored
  3851. SeeAlso: AX=FB01h"Jot-It"
  3852. --------a-2FFB03-----------------------------
  3853. INT 2F U - AutoBraille v1.1A - GET NEXT ???
  3854.     AX = FB03h
  3855. Return: AX = ???
  3856. --------U-2FFB03-----------------------------
  3857. INT 2F U - Jot-It! v1.50 - UNINSTALL
  3858.     AX = FB03h
  3859. Return: resident code removed from memory
  3860. Note:    CAUTION: NO checks are performed to ensure that the interrupt vectors
  3861.       being unhooked (08h,09h,28h,2Fh) actually point at the Jot-It! code
  3862. SeeAlso: AX=FB00h"Jot-It"
  3863. --------a-2FFB-------------------------------
  3864. INT 2F U - AutoBraille v1.1A - SET ???
  3865.     AH = FBh
  3866.     AL = 04h-08h
  3867. Return: AX = 0000h
  3868. --------a-2FFB-------------------------------
  3869. INT 2F U - AutoBraille v1.1A - SET ???
  3870.     AH = FBh
  3871.     AL = 09h-0Fh (???, 0Eh = COM1, 0Fh = COM2)
  3872. Return: ???
  3873. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3874. --------a-2FFB-------------------------------
  3875. INT 2F U - AutoBraille v1.1A - SET ???
  3876.     AH = FBh
  3877.     AL = 10h-1Fh
  3878.     ???
  3879. Return: ???
  3880. --------a-2FFB20-----------------------------
  3881. INT 2F U - AutoBraille v1.1A - SET ??? FLAGS
  3882.     AX = FB20h
  3883.     BL = flags to set
  3884. SeeAlso: AX=FB21h"AutoBraille"
  3885. --------a-2FFB21-----------------------------
  3886. INT 2F U - AutoBraille v1.1A - CLEAR ??? FLAGS
  3887.     AX = FB21h
  3888.     BL = flags to clear
  3889. SeeAlso: AX=FB20h"AutoBraille"
  3890. --------a-2FFB22-----------------------------
  3891. INT 2F U - AutoBraille v1.1A - SET ???
  3892.     AX = FB22h
  3893.     BL = ???
  3894. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3895. --------a-2FFB28-----------------------------
  3896. INT 2F U - AutoBraille v1.1A - ???
  3897.     AX = FB28h
  3898.     BX = ???
  3899.     ???
  3900. Return: ???
  3901. SeeAlso: AX=FB29h"AutoBraille"
  3902. --------a-2FFB29-----------------------------
  3903. INT 2F U - AutoBraille v1.1A - ???
  3904.     AX = FB29h
  3905.     BX = ???
  3906.     ???
  3907. Return: ???
  3908. SeeAlso: AX=FB28h"AutoBraille"
  3909. --------a-2FFB-------------------------------
  3910. INT 2F U - AutoBraille v1.1A - SET ???
  3911.     AH = FBh
  3912.     AL = 2Bh-34h
  3913.     BX = ???
  3914. --------a-2FFB35-----------------------------
  3915. INT 2F U - AutoBraille v1.1A - SET ???
  3916.     AX = FB35h
  3917.     BL = ???
  3918. --------a-2FFB36-----------------------------
  3919. INT 2F U - AutoBraille v1.1A - SET ???
  3920.     AX = FB36h
  3921.     BL = ???
  3922. --------a-2FFB37-----------------------------
  3923. INT 2F U - AutoBraille v1.1A - SET ???
  3924.     AX = FB37h
  3925.     BL = ???
  3926. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3927. --------E-2FFB42BX0001-----------------------
  3928. INT 2F PU - Borland C++ DPMILOAD.EXE - INSTALLATION CHECK???
  3929.     AX = FB42h
  3930.     BX = 0001h
  3931. Return: AX = version number??? (AL=major, AH=minor)
  3932.     CX = next-selector increment
  3933. ---BC2.0---
  3934.     ES:BX -> 80-byte buffer for ???
  3935.     DX = DPMI version
  3936. ---BC3.0---
  3937.     BX = ??? (0000h)
  3938.     DX = ???
  3939.     ES:SI -> list of valid selectors ???
  3940. Notes:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  3941.       as version 1.000, while the version distributed with BC++ 3.0
  3942.       identifies itself as version 1.0; the former is 10864 bytes, the
  3943.       latter 22180 bytes.  The BC2.0 version is a DPMI loader, while
  3944.       the BC3.0 version also adds a DPMI host and DOS extender
  3945.     the BC++ 2.0 version displays an error message if called with BX
  3946.       values other than 0001h-0008h
  3947. SeeAlso: AX=1687h,AX=FB42h/BX=1001h,AX=FB43h
  3948. --------E-2FFB42BX0002-----------------------
  3949. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ALLOCATE MEMORY
  3950.     AX = FB42h
  3951.     BX = 0002h
  3952.     CX = size in bytes
  3953.     DX = bit flags
  3954.         bit 2: set to allocate DOS memory, clear for DPMI memory
  3955.     SI = selector of descriptor to be modified to access allocated memory
  3956.     DI = selector of a second descriptor to be modified
  3957. Return: AX = ??? or 0000h on error
  3958.     CX:DX = linear base address of DPMI memory block
  3959.     SI:DI = handle for DPMI memory block or FFFFh:FFFFh
  3960.     ???
  3961. Note:    two segment descriptors may be set if a code and an aliased data
  3962.       segment are required; if only one descriptor is needed, SI should
  3963.       equal DI on entry
  3964. BUG:    when allocating DOS memory, the code computes the linear address by
  3965.       multiplying the segment number by 4 rather than shifting by 4
  3966. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  3967. --------E-2FFB42BX0002-----------------------
  3968. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ALLOCATE MEMORY
  3969.     AX = FB42h
  3970.     BX = 0002h
  3971.     ES:SI -> memory block info (see #2278)
  3972. Return: ???
  3973. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  3974.       as version 1.000, while the version distributed with BC++ 3.0
  3975.       identifies itself as version 1.0; the former is 10864 bytes, the
  3976.       latter 22180 bytes.
  3977. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  3978.  
  3979. Format of DPMILOAD memory block info:
  3980. Offset    Size    Description    (Table 2278)
  3981.  00h    WORD    flags (see #2279)
  3982.  02h    DWORD    block size in bytes
  3983. ---DPMI memory block---
  3984.  06h    DWORD    DPMI memory block handle
  3985. ---DOS memory block---
  3986.  06h    WORD    real-mode segment of memory block
  3987.  08h    WORD    selector of memory block
  3988. ---
  3989.  0Ah    DWORD    linear address of memory
  3990.  0Eh    WORD    memory operation error code
  3991.         0008h no more free LDT descriptors
  3992. ---if flags bit 0 clear---
  3993.  10h    WORD    code segment selector for memory block or 0000h or FFFFh
  3994.  12h    WORD    data alias selector for memory block or 0000h or FFFFh
  3995. ---if flags bit 0 set---
  3996.  10h    WORD    data segment selector for memory block or 0000h or FFFFh
  3997.  12h    WORD    unused???
  3998.  
  3999. Bitfields for DPMILOAD memory block flags:
  4000. Bit(s)    Description    (Table 2279)
  4001.  0    set if data segment rather than code segment
  4002.  1    information valid
  4003.  2    set if DOS memory block rather than DPMI memory block
  4004.  4    ???
  4005.  15    set if no LDT selectors for memory block???
  4006. SeeAlso: #2278
  4007. --------E-2FFB42BX0003-----------------------
  4008. INT 2F PU - Borland C++ DPMILOAD.EXE - GET AVAILABLE MEMORY
  4009.     AX = FB42h
  4010.     BX = 0003h
  4011. Return: DX:AX = size of largest free block in paragraphs
  4012.         0000h:0000h on error (BC3.0 version only)
  4013. Note:    AX and DX are destroyed on error, but no other error indicator is
  4014.       returned, under the BC++ 2.0 version of DPMILOAD
  4015. SeeAlso: AX=FB42h/BX=0002h
  4016. --------E-2FFB42BX0004-----------------------
  4017. INT 2F PU - Borland C++ DPMILOAD.EXE - LOAD PROTECTED-MODE EXECUTABLE???
  4018.     AX = FB42h
  4019.     BX = 0004h
  4020.     DS:DX -> ASCIZ filename of protected-mode executable
  4021. Return: CX = selector of ??? or 0000h
  4022. ---BC3.0---
  4023.     DX = status (0000h,FFF4h,others???) (see #2280)
  4024. Note:    the filename may also be terminated by a CR rather than a NUL under the
  4025.       BC++ 3.0 version of DPMILOAD
  4026.  
  4027. (Table 2280)
  4028. Values for DPMILOAD function status:
  4029.  0000h    successful
  4030.  0001h    ??? failure
  4031.  0002h    invalid selector
  4032.  0004h    unknown error
  4033.  0008h    no more LDT descriptors available???
  4034.  FFDEh    unable to set descriptor
  4035.  FFDFh    unable to get segment base address
  4036.  FFE0h    ???
  4037.  FFF2h    invalid parameter value
  4038.  FFF4h    component of filename too long (name not in 8.3 format)
  4039.  FFF5h    pathname too long (>79 chars)
  4040.  FFF6h    ???
  4041.  FFF8h    ???
  4042.  FFF9h    index out of range
  4043.  FFFAh    ???
  4044.  FFFCh    invalid access to code segment???
  4045.  FFFEh    ???
  4046.  FFFFh    general error
  4047. --------E-2FFB42BX0005-----------------------
  4048. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NAME
  4049.     AX = FB42h
  4050.     BX = 0005h
  4051.     CX = selector of DPMILOAD data (see #2281)
  4052.     DS:DX -> ASCIZ or CR-terminated name of ??? (case ignored)
  4053. Return: DX = status (see #2280)
  4054.         0000h successful
  4055.         AX:BX -> ??? FAR function (called with two words on top of stk)
  4056.         else
  4057.         BX destroyed
  4058. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=000Eh
  4059.  
  4060. Format of DPMILOAD data:
  4061. Offset    Size    Description    (Table 2281)
  4062.  00h 12 BYTEs    ???
  4063.  0Ch    WORD    ??? bit flags
  4064.  0Eh 14 BYTEs    ???
  4065.  1Ch    WORD    number of memory control records (see #2284)
  4066.  1Eh 25 BYTEs    ???
  4067.  37h    BYTE    ??? bit flags
  4068.         bit 4: data valid???
  4069.  38h  4 BYTEs    ???
  4070.  3Ch    WORD    ???
  4071.  3Eh 12 BYTEs    ???
  4072.  46h    BYTE    ??? counter
  4073.  47h    BYTE    ???
  4074.  48h    BYTE    ???
  4075.  49h    BYTE    ???
  4076.  4Ah    WORD    ???
  4077.  4Ch  2 BYTEs    ???
  4078.  4Eh    WORD    offset of array of 64-byte memory control records
  4079.  52h    WORD    offset of name list (see #2282)
  4080.  54h  4 BYTEs    ???
  4081.  58h    WORD    offset of array of 6-byte objects (see #2283)
  4082.  5Ah  8 BYTEs    ???
  4083.  62h  9 BYTEs    ASCIZ name for ???
  4084.  6Bh  9 BYTEs    ASCIZ name for ???
  4085.     ???
  4086.  
  4087. Format of name list entry [array]:
  4088. Offset    Size    Description    (Table 2282)
  4089.  00h    BYTE    length of name (00h if end of array)
  4090.  01h  N BYTEs    name
  4091.  N+1    WORD    1-based index into array of unknown 6-byte objects
  4092.  
  4093. Format of 6-byte objects:
  4094. Offset    Size    Description    (Table 2283)
  4095.  00h    BYTE    ???
  4096.  01h    BYTE    ???
  4097.  02h    BYTE    ???
  4098.  03h    BYTE    1-based index of memory control record
  4099.  04h    WORD    ???
  4100.  
  4101. Format of memory control record:
  4102. Offset    Size    Description    (Table 2284)
  4103.  00h 20 BYTEs    memory block info (see #2278)
  4104.  14h  6 BYTEs    ???
  4105.  1Ah    BYTE    ???
  4106.  1Bh  2 BYTEs    ???
  4107.  1Dh    BYTE    ??? bit flags
  4108.  1Eh 14 BYTEs    ???
  4109.  2Ch    DWORD    pointer to ??? memory control record or 0000h:0000h
  4110.  30h    DWORD    pointer to ??? memory control record or 0000h:0000h
  4111.  34h    DWORD    pointer to next??? memory control record or 0000h:0000h
  4112.  38h    DWORD    pointer to prev??? memory control record or 0000h:0000h
  4113.  3Ch  4 BYTEs    ???
  4114. Note:    the pointers at offsets 2Ch and 30h form a doubly-linked list, as do
  4115.       the pointers at offsets 34h and 38h
  4116. --------E-2FFB42BX0006-----------------------
  4117. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NUMBER
  4118.     AX = FB42h
  4119.     BX = 0006h
  4120.     CX = selector of DPMILOAD data (see #2281)
  4121.     DX = 1-based index into array of ??? 6-byte objects
  4122. Return: DX = status (see #2280)
  4123.         0000h successful
  4124.         AX:BX -> ??? FAR function (called with two words on top of stk)
  4125.         else
  4126.         BX destroyed
  4127. SeeAlso: AX=FB42h/BX=0005h,AX=FB42h/BX=000Eh
  4128. --------E-2FFB42BX0007-----------------------
  4129. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ???
  4130.     AX = FB42h
  4131.     BX = 0007h
  4132.     CX = selector of ???
  4133. Return: ???
  4134. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  4135.       as version 1.000, while the version distributed with BC++ 3.0
  4136.       identifies itself as version 1.0; the former is 10864 bytes, the
  4137.       latter 22180 bytes.
  4138. --------E-2FFB42BX0007-----------------------
  4139. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4140.     AX = FB42h
  4141.     BX = 0007h
  4142.     CX = selector of DPMILOAD data (see #2281)
  4143.     ???
  4144. Return: DX = status (see #2280)
  4145.         0000h successful
  4146.         AX = ???
  4147. --------E-2FFB42BX0008-----------------------
  4148. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  4149.     AX = FB42h
  4150.     BX = 0008h
  4151.     CX = bit flags
  4152.         bit 2: set if DPMI memory, clear if DOS memory
  4153.     DX = selector of DOS memory block
  4154.     SI:DI = handle of DPMI memory block
  4155. Return: DX = 0000h on error, unchanged if succcessful
  4156. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  4157.       as version 1.000, while the version distributed with BC++ 3.0
  4158.       identifies itself as version 1.0; the former is 10864 bytes, the
  4159.       latter 22180 bytes.
  4160. SeeAlso: AX=FB42h/BX=0002h
  4161. --------E-2FFB42BX0008-----------------------
  4162. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  4163.     AX = FB42h
  4164.     BX = 0008h
  4165.     ES:SI -> memory block info (see #2278)
  4166. Return: ???
  4167. SeeAlso: AX=FB42h/BX=0009h
  4168. --------E-2FFB42BX0009-----------------------
  4169. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - RESIZE MEMORY BLOCK
  4170.     AX = FB42h
  4171.     BX = 0009h
  4172.     ES:SI -> memory block info (see #2278)
  4173.     ???
  4174. Return: ???
  4175. SeeAlso: AX=FB42h/BX=0008h"3.0"
  4176. --------E-2FFB42BX000A-----------------------
  4177. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INIT DPMI HOST AND SPAWN SUBSHELL
  4178.     AX = FB42h
  4179.     BX = 000Ah
  4180.     CX = 0001h
  4181.     DX = ???
  4182.     SI = ???
  4183. Return: after user exits subshell
  4184. Notes:    this call is used by DPMIRES; unlike most of the DPMILOAD calls, this
  4185.       function is not available in protected mode.
  4186.     the BC2.0 version of DPMILOAD is purely a DPMI loader, while the BC3.0
  4187.       version also adds a DPMI host and DOS extender.
  4188. SeeAlso: AX=FB42h/BX=0004h,AX=FB42h/BX=0015h
  4189. --------E-2FFB42BX000B-----------------------
  4190. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - UNUSED
  4191.     AX = FB42h
  4192.     BX = 000Bh
  4193. --------E-2FFB42BX000C-----------------------
  4194. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE DESCRIPTORS FOR MEMORY BLOCK???
  4195.     AX = FB42h
  4196.     BX = 000Ch
  4197.     ES:SI -> memory block info ??? (see #2278)
  4198. Return: DX = status???
  4199. SeeAlso: AX=FB42h/BX=000Fh
  4200. --------E-2FFB42BX000D-----------------------
  4201. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SIMULATE REAL MODE INTERRUPT
  4202.     AX = FB42h
  4203.     BX = 000Dh
  4204.     CX = number of words to copy from protected-mode to real mode stack
  4205.     DL = interrupt number
  4206.     DH = flags
  4207.         bit 0: reset the interrupt controller and A20 line
  4208.     ES:DI -> real-mode call structure (see #2298 at INT 31/AX=0300h)
  4209. Return: CX = status
  4210.         0000h successful
  4211.         0001h failed
  4212. SeeAlso: INT 31/AX=0300h
  4213. --------E-2FFB42BX000E-----------------------
  4214. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  4215.     AX = FB42h
  4216.     BX = 000Eh
  4217.     DS:DX -> ASCIZ or CR-terminated name of ???
  4218. Return: CX = selector of DPMILOAD data (see #2281) corresponding to name,
  4219.           0000h on error
  4220. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=001Fh
  4221. --------E-2FFB42BX000F-----------------------
  4222. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - REALLOCATE LDT DESCRPS TO MEMBLK???
  4223.     AX = FB42h
  4224.     BX = 000Fh
  4225.     ES:SI -> memory block info (see #2278)
  4226. Return: ???
  4227. SeeAlso: AX=FB42h/BX=000Ch
  4228. --------E-2FFB42BX0010-----------------------
  4229. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SEGMENT TO SELECTOR
  4230.     AX = FB42h
  4231.     BX = 0010h
  4232.     DX = segment number
  4233. Return: CX = status (0000h,0008h) (see also AX=FB42h/BX=0004h)
  4234.         0000h successful
  4235.         DX = selector number for descriptor
  4236.         0008h failed
  4237. SeeAlso: AX=FB42h/BX=0023h
  4238. --------E-2FFB42BX0011-----------------------
  4239. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4240.     AX = FB42h
  4241.     BX = 0011h
  4242.     CX = selector of DPMILOAD data (see #2281)
  4243.     ???
  4244. Return: DX = status (0000h,0002h,FFFEh) (see also #2280)
  4245.         0000h successful
  4246.         AX:BX -> ??? name
  4247.         FFFEh ??? error
  4248. --------E-2FFB42BX0012-----------------------
  4249. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4250.     AX = FB42h
  4251.     BX = 0012h
  4252.     CX = selector for ???
  4253. Return: CX = selector for ???
  4254. --------E-2FFB42BX0013-----------------------
  4255. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4256.     AX = FB42h
  4257.     BX = 0013h
  4258.     CX = selector of DPMILOAD data (see #2281)
  4259.     DX = 1-based index of ???
  4260. Return: CX = status (0000h,0002h,FFF9h) (see also #2280)
  4261.         0000h successful
  4262.         BX = ??? or 0000h
  4263.         FFF9h ??? error
  4264. --------E-2FFB42BX0014-----------------------
  4265. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INSTALLATION CHECK
  4266.     AX = FB42h
  4267.     BX = 0014h
  4268.     CX = 0001h
  4269. Return: BX = 0000h if installed
  4270. Note:    unlike most of the DPMILOAD functions, this call is available only in
  4271.       real or V86 mode
  4272. SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=000Ah
  4273. --------E-2FFB42BX0015-----------------------
  4274. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - UNINSTALL
  4275.     AX = FB42h
  4276.     BX = 0015h
  4277.     CX = 0001h
  4278. Return: ???
  4279. Note:    unlike most of the DPMILOAD functions, this call is available only in
  4280.       real or V86 mode
  4281. SeeAlso: AX=FB42h/BX=000Ah
  4282. --------E-2FFB42BX0016-----------------------
  4283. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  4284.     AX = FB42h
  4285.     BX = 0016h
  4286.     CX = selector of DPMILOAD data (see #2281)
  4287. Return: DX = status (see also AX=FB42h/BX=0004h)
  4288.         0000h successful
  4289.         CX = ???
  4290. --------E-2FFB42BX0017-----------------------
  4291. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4292.     AX = FB42h
  4293.     BX = 0017h
  4294.     CX = ???
  4295.     DX = ???
  4296.     ???
  4297. Return: DX = status (0000h,0001h) (see #2280)
  4298. --------E-2FFB42BX0018-----------------------
  4299. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET ???
  4300.     AX = FB42h
  4301.     BX = 0018h
  4302.     CX = ???
  4303. --------E-2FFB42BX0019-----------------------
  4304. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4305.     AX = FB42h
  4306.     BX = 0019h
  4307.     CX = selector for ???
  4308.     ???
  4309. Return: DX = status (see also AX=FB42h/BX=0004h)
  4310.         0000h successful
  4311.         CX = selector for ???
  4312. --------E-2FFB42BX001A-----------------------
  4313. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4314.     AX = FB42h
  4315.     BX = 001Ah
  4316.     CX = selector for ???
  4317.     ???
  4318. Return: DX = status (see also AX=FB42h/BX=0004h)
  4319.         0000h successful
  4320.         0004h failed
  4321.     CX:BX -> ???
  4322. --------E-2FFB42BX001B-----------------------
  4323. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4324.     AX = FB42h
  4325.     BX = 001Bh
  4326.     CX = selector of DPMILOAD data (see #2281)
  4327.     DX = offset of ???
  4328. Return: DX = status (0000h,0002h) (see also #2280)
  4329.         0000h successful
  4330.         BX = selector for ???
  4331.         CX = selector for ???
  4332. --------E-2FFB42BX001C-----------------------
  4333. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4334.     AX = FB42h
  4335.     BX = 001Ch
  4336.     ES = selector for DPMILOAD data (see #2281)
  4337.     CX = 1-based index of ???
  4338.     DX = 1-based index of ???
  4339. Return: DX = status (0000h,0002h,FFF9h) (see #2280)
  4340. --------E-2FFB42BX001D-----------------------
  4341. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  4342.     AX = FB42h
  4343.     BX = 001Dh
  4344. Return: CX:DX = ???
  4345. --------E-2FFB42BX001E-----------------------
  4346. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4347.     AX = FB42h
  4348.     BX = 001Eh
  4349.     CX = ???
  4350.     ???
  4351. Return: DX = status (see also AX=FB42h/BX=0004h)
  4352.         0000h successful
  4353.         FFF7h ??? error
  4354.     CX:BX -> ???
  4355. --------E-2FFB42BX001F-----------------------
  4356. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  4357.     AX = FB42h
  4358.     BX = 001Fh
  4359.     DS:DX -> 8-character name of ???
  4360.     ???
  4361. Return: CX = selector of DPMILOAD data (see #2281) for ???
  4362.         0000h on error
  4363. SeeAlso: AX=FB42h/BX=000Eh
  4364. --------E-2FFB42BX0020-----------------------
  4365. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION???
  4366.     AX = FB42h
  4367.     BX = 0020h
  4368. Return: DX = ??? (always 0000h)
  4369. --------E-2FFB42BX0021-----------------------
  4370. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROCESSOR EXCEPTION HANDLER VECT
  4371.     AX = FB42h
  4372.     BX = 0021h
  4373.     CL = exception number (00h-1Fh)
  4374. Return: DX = status (see also AX=FB42h/BX=0004h)
  4375.         0000h successful
  4376.         AX:BX = selector:offset of handler
  4377.         FFF2h unable to get exception handler vector
  4378. SeeAlso: AX=FB42h/BX=0022h,AX=FB42h/BX=0024h,INT 31/AX=0202h
  4379. --------E-2FFB42BX0022-----------------------
  4380. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROCESSOR EXCEPTION HANDLER VECT
  4381.     AX = FB42h
  4382.     BX = 0022h
  4383.     CL = exception number (00h-1Fh)
  4384.     SI:DX = selector:offset of new handler
  4385. Return: DX = status (0000h,0004h,FFF2h) (see #2280)
  4386. SeeAlso: AX=FB42h/BX=0021h,AX=FB42h/BX=0025h,INT 31/AX=0203h
  4387. --------E-2FFB42BX0023-----------------------
  4388. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SELECTOR TO SEGMENT NUMBER
  4389.     AX = FB42h
  4390.     BX = 0023h
  4391.     CX = selector
  4392. Return: DX = status (see also AX=FB42h/BX=0004h)
  4393.         0000h successful
  4394.         CX = real-mode segment number
  4395.         FFF2h descriptor has invalid base address for real-mode segment
  4396. SeeAlso: AX=FB42h/BX=0010h
  4397. --------E-2FFB42BX0024-----------------------
  4398. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROTECTED-MODE INTERRUPT VECTOR
  4399.     AX = FB42h
  4400.     BX = 0024h
  4401.     CL = interrupt number
  4402. Return: DX = status (0000h) (see also AX=FB42h/BX=0004h)
  4403.     AX:BX = selector:offset of handler
  4404. SeeAlso: AX=FB42h/BX=0025h,INT 31/AX=0204h
  4405. --------E-2FFB42BX0025-----------------------
  4406. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROTECTED-MODE INTERRUPT VECTOR
  4407.     AX = FB42h
  4408.     BX = 0025h
  4409.     CL = interrupt number
  4410.     SI:DX = selector:offset of new handler
  4411. Return: DX = status (0000h,0004h,FFF2h) (see #2280)
  4412. SeeAlso: AX=FB42h/BX=0024h,INT 31/AX=0205h
  4413. --------E-2FFB42BX0026-----------------------
  4414. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4415.     AX = FB42h
  4416.     BX = 0026h
  4417.     CX = selector of DPMILOAD data (see #2281)
  4418.     DX = 1-based index of ???
  4419.     ???
  4420. Return: DX = status (0000h,0002h,FFF9h) (see #2280)
  4421.         0000h successful
  4422.         BX = offset of ??? within data structure
  4423. --------E-2FFB42BX0027-----------------------
  4424. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  4425.     AX = FB42h
  4426.     BX = 0027h
  4427.     CX = selector of DPMILOAD data (see #2281)
  4428.     DX = offset of ???
  4429. Return: DX = status (see also AX=FB42h/BX=0004h)
  4430.         0000h successful
  4431.         BX = ???
  4432. --------E-2FFB42BX0080-----------------------
  4433. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  4434.     AX = FB42h
  4435.     BX = 0080h
  4436.     ???
  4437. Return: AX = ???
  4438.     ???
  4439. --------E-2FFB42BX0081-----------------------
  4440. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  4441.     AX = FB42h
  4442.     BX = 0081h
  4443.     ???
  4444. Return: AX = ???
  4445.     ???
  4446. --------E-2FFB42BX1001-----------------------
  4447. INT 2F U - Borland RTM.EXE 1.0 - INSTALLATION CHECK???
  4448.     AX = FB42h
  4449.     BX = 1001h
  4450. Return: BX = 0000h
  4451. SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=1002h,AX=FB42h/BX=1003h
  4452. --------E-2FFB42BX1002-----------------------
  4453. INT 2F U - Borland RTM.EXE 1.0 - ???
  4454.     AX = FB42h
  4455.     BX = 1002h
  4456.     ???
  4457. Return: ???
  4458. SeeAlso: AX=FB42h/BX=1001h
  4459. --------E-2FFB42BX1003-----------------------
  4460. INT 2F U - Borland RTM.EXE 1.0 - ???
  4461.     AX = FB42h
  4462.     BX = 1003h
  4463.     ???
  4464. Return: ???
  4465. SeeAlso: AX=FB42h/BX=1001h
  4466. --------E-2FFB43-----------------------------
  4467. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION
  4468.     AX = FB43h
  4469.     BX = subfunction (at least 0000h-000Eh)
  4470. Notes:    this function is only present in protected mode; it does nothing but
  4471.       an immediate IRET
  4472.     DPMILOAD.EXE itself calls various subfunctions:
  4473.         subfunction 0004h is called with CX=selector of ???, DI=selector
  4474.           of DPMILOAD data
  4475.         subfunction 0008h is called with CX=selector of DPMILOAD data
  4476. SeeAlso: AX=FB42h/BX=0001h
  4477. --------G-2FFB43BX0100-----------------------
  4478. INT 2F PU - Borland TDX - INSTALLATION CHECK
  4479.     AX = FB43h
  4480.     BX = 0100h
  4481. Return: BX = FB43h if loaded
  4482. Program: TDX is Borland's Turbo Debugger variant for DPMI programs
  4483. Note:    Borland Pascal 7 DPMI programs use this call to check whether they
  4484.       should install their own stack and general protection exception
  4485.       handlers, or allow TDX to handle those exceptions
  4486. --------a-2FFB64-----------------------------
  4487. INT 2F U - AutoBraille v1.1A - GET ???
  4488.     AX = FB64h
  4489. Return: AX = ??? (0006h seen)
  4490. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  4491. --------E-2FFBA1BX0081-----------------------
  4492. INT 2F U - TKERNEL (Borland DOS extender) - INSTALLATION CHECK
  4493.     AX = FBA1h
  4494.     BX = 0081h
  4495.     ES:DI -> 16-byte buffer
  4496. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  4497. Program: TKERNEL is a licensed version of AI Architects/Ergo's OS/x86.
  4498. Note:    TKERNEL was present only in Borland C++ 2.0; with version 3.0, the DOS
  4499.       extender was moved into DPMILOAD.
  4500. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h
  4501. SeeAlso: INT 21/AX=4403h"TKERNEL"
  4502. --------E-2FFBA1BX0082-----------------------
  4503. INT 2F U - TKERNEL (Borland DOS extender) - GET ENTRY POINT
  4504.     AX = FBA1h
  4505.     BX = 0082h
  4506.     ES:DI -> response buffer (see #2285)
  4507. Return: ES:DI buffer filled
  4508. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  4509.  
  4510. Format of TKERNEL response buffer:
  4511. Offset    Size    Description    (Table 2285)
  4512.  00h  4 BYTEs    signature "IABH"
  4513.  04h    DWORD    pointer to FAR extender entry point (see #2286)
  4514.  
  4515. (Table 2286)
  4516. Call TKERNEL entry point with:
  4517.     AX = function number
  4518.         0000h initialize???
  4519.         STACK:    WORD  ???
  4520.         Return: AX = status???
  4521.             STACK unchanged
  4522.         0001h get version???
  4523.         Return: AX = 0200h for v2.0.34
  4524.         0002h get ???
  4525.         Return: AX = ??? (011Eh or 0182h seen)
  4526.         0003h load protected-mode executable
  4527.         STACK:    DWORD -> ASCIZ filename of executable
  4528.             DWORD    ???
  4529.             DWORD -> program arguments (counted string plus CR)
  4530.             DWORD -> environment for protected-mode executable
  4531.                 (terminated with two consecutive NULs)
  4532.             DWORD -> WORD buffer for ???
  4533.         Return: AX = status???
  4534.             STACK unchanged
  4535.         0004h get descriptor
  4536.         STACK:    WORD    selector for which to get descriptor
  4537.             WORD    segment number (when running in real mode)
  4538.             DWORD -> buffer for descriptor
  4539.         Return: CF clear if successful
  4540.                 buffer filled
  4541.             CF set on error
  4542.                 AX destroyed???
  4543.             STACK unchanged
  4544.         0005h ???
  4545.         STACK:    WORD    selector for ???
  4546.             WORD    subfunction number???
  4547.                 0000h run previously-loaded program???
  4548.                 0001h ??? (similar to 0000h)
  4549.                 0002h
  4550.                 0003h
  4551.                 0005h ??? (similar to 0000h and 0001h)
  4552.         Return: AX = status???
  4553.             STACK unchanged
  4554.         0006h ???
  4555.         STACK:    WORD ???
  4556.             DWORD -> WORD (call) max iterations of ???
  4557.                       (ret) remaining iterations
  4558.         Return: AX = ???
  4559.             STACK unchanged
  4560.         0007h unused
  4561.         Return: AX = 0001h
  4562.         0008h unused
  4563.         Return: AX = 0001h
  4564.         0009h copy protected-mode memory into conventional memory
  4565.         STACK:    WORD    selector for source segment
  4566.             WORD    segment of source if in real mode???
  4567.             DWORD    offset of source
  4568.             WORD    number of bytes to copy
  4569.             DWORD -> low-memory destination
  4570.         Return: AX = status
  4571.             STACK unchanged
  4572.         000Ah copy conventional memory into protected-mode memory
  4573.         STACK:    WORD    selector for destination segment
  4574.             WORD    segment of destination if in real mode???
  4575.             DWORD    offset of destination
  4576.             WORD    number of bytes to copy
  4577.             DWORD -> low-memory source
  4578.         Return: AX = status
  4579.             STACK unchanged
  4580.         000Bh get ??? pointers
  4581.         STACK:    WORD desired pointer
  4582.                 0000h get ???
  4583.                 0002h get protected-mode CR3
  4584.                 0003h get 4K page table buffer pointer
  4585.                 else Return: DX:AX = FFFFh:FFFFh
  4586.         Return: DX:AX = requested pointer
  4587.             STACK unchanged
  4588.         000Ch set ??? pointers
  4589.         STACK:    WORD desired pointer
  4590.                 0000h set ???
  4591.                 0002h set protected-mode CR3
  4592.                 0003h set 4K page table buffer pointer
  4593.                 else ignore
  4594.             DWORD new value for pointer
  4595.         Return: STACK unchanged
  4596.         000Dh get ??? pointers
  4597.         STACK:    WORD desired pointer
  4598.                 0000h get ???
  4599.                 0001h get ???
  4600.                 0002h get ???
  4601.                 0003h get ???
  4602.                 0004h get ???
  4603.                 0005h get ???
  4604.                 0006h get ???
  4605.                 0007h get ???
  4606.                 else Return: DX:AX = FFFFh:FFFFh
  4607.         Return: DX:AX = desired pointer
  4608.             STACK unchanged
  4609.         000Eh set ??? pointer
  4610.         STACK:    WORD desired pointer
  4611.                 0000h set ???
  4612.                 0001h set ???
  4613.                 0002h set ???
  4614.                 0003h set ???
  4615.                 0004h set ???
  4616.                 0005h set ???
  4617.                 0006h set ???
  4618.                 0007h set ???
  4619.                 else Return: DX:AX = FFFFh:FFFFh
  4620.         Return: STACK unchanged
  4621.         000Fh get ???
  4622.         Return: AX = ??? (seen 0008h)
  4623.         0010h get ???
  4624.         Return: AX = ???
  4625.         0011h determine whether selector is valid
  4626.         STACK:    WORD    possible selector
  4627.         Return: AX = selector or 0000h if invalid
  4628.             STACK unchanged
  4629.         0012h get physical address
  4630.         STACK:    WORD    selector for desired segment
  4631.             WORD    segment number if in real mode
  4632.             DWORD    offset within segment
  4633.         Return: DX:AX = 32-bit physical address or 00000000h on error
  4634.             BX destroyed
  4635.             STACK unchanged
  4636.         0013h ???
  4637.         Note:    normally jumps to code for function 0012h
  4638.         0014h copy protected-mode memory to conventional memory, with ???
  4639.         STACK:    WORD    selector for source segment
  4640.             WORD    segment of source if in real mode???
  4641.             DWORD    offset of source
  4642.             WORD    number of bytes to copy
  4643.             DWORD -> low-memory destination
  4644.         Return: AX = status???
  4645.             STACK unchanged
  4646.         0015h copy conventional memory to protected-mode memory, with ???
  4647.         STACK:    WORD    selector for destination segment
  4648.             WORD    segment of destination if in real mode???
  4649.             DWORD    offset of destination
  4650.             WORD    number of bytes to copy
  4651.             DWORD -> low-memory source
  4652.         Return: AX = status???
  4653.             STACK unchanged
  4654.         0016h set ??? pointer
  4655.         STACK:    WORD    unused
  4656.             DWORD -> ??? or 0000h:0000h
  4657.         Return: AX = 0000h
  4658.             STACK unchanged
  4659.         0017h allocate real-mode procedure???
  4660.         STACK:    DWORD    ASCIZ name of procedure
  4661.             DWORD ???
  4662.             DWORD    address of subroutine to invoke
  4663.         Return: AX = status
  4664.                 0032h procedure by that name exists
  4665.                 0033h no more real-mode procedures available
  4666.             DX destroyed
  4667.             STACK unchanged
  4668.         0018h unused
  4669.         Return: AX = 0001h
  4670.         0019h get parameter block
  4671.         Return: DX:AX -> parameter block (format unknown at this time,
  4672.                   but 92h bytes)
  4673.                   (preceded by signature "!!PARAM-BLOCK!!")
  4674.         001Ah get ???
  4675.         Return: AX = ??? (0148h seen)
  4676.         001Bh free real-mode procedure???
  4677.         STACK:    DWORD -> ASCIZ name of procedure
  4678.         Return: ???
  4679.             STACK unchanged
  4680.         001Ch check whether packets from protected mode task pending
  4681.         Return: AX = 0001h if packets pending, 0000h if not
  4682.         001Dh set ???
  4683.         STACK:    DWORD ??? or 0000h:0000h
  4684.         Return: AX,BX destroyed
  4685.             STACK unchanged
  4686.         001Eh ???
  4687.         STACK:    WORD ??? (high byte ignored)
  4688.             DWORD -> data structure (see below)
  4689.         Return: AX,BX,CX,DX destroyed
  4690.             data structure updated
  4691.             STACK unchanged
  4692.         Format of data structure:
  4693.         Offset    Size    Description
  4694.          00h  2 BYTEs    unused
  4695.          02h    WORD    ???
  4696.          04h    WORD    ???
  4697.          06h    WORD    ???
  4698.          08h  2 BYTEs    unused
  4699.          0Ah    WORD    ???
  4700.          0Ch    WORD    (call) ???
  4701.                 (ret) offset of this data structure (BUG?)
  4702.         001Fh set ???
  4703.         STACK:    WORD ??? (set to 0001h if zero)
  4704.         Return: AX destroyed
  4705.             STACK unchanged
  4706.         0020h ???
  4707.         STACK:    DWORD -> ??? (8 bytes of data)
  4708.         Return: AX = ???
  4709.             STACK unchanged
  4710.         0021h ???
  4711.         STACK:    DWORD -> ??? (8 bytes of data)
  4712.             WORD    ???
  4713.             WORD    ???
  4714.         Return: AX = ???
  4715.             STACK unchanged
  4716.         0022h ???
  4717.         STACK:    DWORD -> ??? (8 bytes of data)
  4718.             DWORD -> 4-byte buffer for results
  4719.         Return: AX = ???
  4720.             STACK unchanged
  4721.         0023h ???
  4722.         STACK:    DWORD -> ??? (8 bytes of data)
  4723.         Return: AX = ???
  4724.             STACK unchanged
  4725.         0024h set ???
  4726.         STACK:    WORD ???
  4727.         Return: AX destroyed
  4728.             STACK unchanged
  4729.         0025h get ???
  4730.         Return: AX = ??? (value set with func 0024h)
  4731.         0026h BUG: jumps to hyperspace due to fencepost error
  4732.         FFFFh set DOS memory management functions
  4733.         BX:SI -> FAR routine for allocating DOS memory
  4734.               (called with AH=48h,BX=number of paragraphs to alloc;
  4735.               returns CF clear, AX=segment of allocated memory, or
  4736.                   CF set on error)
  4737.         CX:DI -> FAR routine for freeing DOS memory
  4738.               (called with AH=49h,ES=segment of block to free;
  4739.               returns CF set on error, AX=error code)
  4740.         Note: each of these pointers normally points at INT 21/RETF
  4741.         other Return: AX = 0001h
  4742. Note:    BX may be destroyed by any of the API calls
  4743. --------E-2FFBA1BX0084-----------------------
  4744. INT 2F U - TKERNEL (Borland DOS extender) - UNINSTALL
  4745.     AX = FBA1h
  4746.     BX = 0084h
  4747.     ES:DI -> response buffer (see #2287)
  4748. Return: ES:DI buffer filled
  4749. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  4750.  
  4751. Format of TKERNEL response buffer:
  4752. Offset    Size    Description    (Table 2287)
  4753.  00h  4 BYTEs    signature "IABH"
  4754.  04h    WORD    success indicator
  4755.         0001h failed (INT 2F hooked by another program)
  4756.         unchanged if successful
  4757.  06h    WORD    segment of ???
  4758.  08h    WORD    segment of ??? memory block to free if nonzero
  4759.  0Ah    WORD    segment of ??? memory block to free if nonzero
  4760. --------s-2FFBFBES0000-----------------------
  4761. INT 2F U - SoundBlaster speech driver - INSTALLATION CHECK
  4762.     AX = FBFBh
  4763.     ES = 0000h
  4764. Return: ES nonzero if installed
  4765.         ES:BX -> entry point data structure (see #2288)
  4766. SeeAlso: INT 80/BX=0000h,INT F3"SoundBlaster"
  4767.  
  4768. Format of SoundBlaster entry point data structure:
  4769. Offset    Size    Description    (Table 2288)
  4770.  00h  3 BYTEs    signature "FB "
  4771.  03h    BYTE    driver major version number???
  4772.  04h    DWORD    speech driver entry point (see #2289)
  4773.  08h 24 BYTEs    ???
  4774.  20h  ? BYTEs    data buffer for calling speech driver
  4775.  
  4776. (Table 2289)
  4777. Call SoundBlaster speech driver entry point with:
  4778.     AL = function
  4779.         07h speak a string
  4780.         data buffer (see #2288) contains:
  4781.             BYTE  length of string
  4782.               N BYTEs string to speak
  4783. --------K-2FFD12-----------------------------
  4784. INT 2F - KS/KEYSTKCT.EXE - INSTALLATION CHECK
  4785.     AX = FD12h
  4786. Return: AX = 0093h if installed
  4787.         ES = resident code segment
  4788.         ES:CX -> internal "putbuf" routine
  4789. Program: KS/KEYSTKCT.EXE is a key stacking utility (4DOS KEYSTACK.SYS 
  4790.       look-alike) by Martin Gerdes, published in c't 11/1991, which can be
  4791.       loaded as a device driver or as a TSR. It does not emulate 4DOS
  4792.       KSTACK API
  4793. Note:    the default buffer size is 128 keys
  4794. --------N-2FFE00BX4454-----------------------
  4795. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  4796.     AX = FE00h
  4797.     BX = 4454h ("DT")
  4798.     CX = 4B52h ("KR")
  4799.     DX = 4E4Dh ("NM")
  4800. Return: AL = FFh if installed
  4801.        BX = 524Eh ("RM")
  4802.        CX = 4D44h ("MD")
  4803.        DX = 544Bh ("TK")
  4804. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  4805. SeeAlso: AX=FE08h
  4806. --------N-2FFE00BX4454-----------------------
  4807. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  4808.     AX = FE00h
  4809.     BX = 4454h ("DT")
  4810.     CX = 4B52h ("KR")
  4811.     DX = 544Dh ("TM")
  4812. Return: AL = FFh if installed
  4813.        BX = 5254h ("RT")
  4814.        CX = 4D44h ("MD")
  4815.        DX = 544Bh ("TK")
  4816. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  4817. SeeAlso: AX=FE08h
  4818. --------U-2FFE00DI4E55-----------------------
  4819. INT 2F U - NORTON UTILITIES 5.0+ TSRs - INSTALLATION CHECK/STATUS REPORT
  4820.     AX = FE00h
  4821.     DI = 4E55h ("NU")
  4822.     SI = TSR identifier (see #2290)
  4823. Return: SI = TSR reply
  4824.         lowercase version of SI on entry (i.e. SI OR 2020h)
  4825.     AH = status
  4826.         00h installed but disabled internally
  4827.         01h installed and enabled
  4828.     AL = installed product
  4829.         00h NCACHE-x or DISKREET
  4830.         01h SPEEDRV / FILESAVE / EP / DISKMON v6+ installed
  4831.         02h NCACHE2 / SMARTCAN
  4832.         45h DISKMON v5 installed
  4833.     BX = length of *.INI file (DISKMON and FILESAVE/EP/SMARTCAN only)
  4834.           (see #2291,#2292)
  4835.     CX = segment of resident portion
  4836.         FFFFh if completely loaded high (NCACHE)
  4837. ---FILESAVE/EP---
  4838.     DL = ??? (apparently always 00h)
  4839. ---DISKMON---
  4840.     DX = ??? (apparently always 1AE6h [v5] / 1B86h [v6] / 1C26h [v7])
  4841. Notes:    the value returned in CX is incorrect for NCACHE 6.00
  4842.     all Norton Caches install as SMARTAAR drivers like SMARTDRV v3
  4843.     NCACHE2 and SPEEDRV both support the SMARTDRV v4+ installation check
  4844.     to detect Diskreet NDisk drives use CDS/DPB (see INT 21/AH=52h)
  4845. SeeAlso: AX=4A10h/BX=0000h,AX=FE01h,AX=FE02h,AX=FE03h,AX=FE04h,AX=FE05h
  4846. SeeAlso: INT 21/AX=4402h"SMARTDRV"
  4847.  
  4848. (Table 2290)
  4849. Values for Norton Utilities TSR identifier:
  4850.  4346h    ("CF") NCACHE-F (v5) / NCACHE (v6) / NCACHE2 (v7+) / SPEEDRV
  4851.  4353h    ("CS") NCACHE-S (v5 only)
  4852.  4443h    ("DC") DISKREET
  4853.  444Dh    ("DM") DISKMON
  4854.  4653h    ("FS") FILESAVE (v5) / EP (v6) / SMARTCAN (v7+)
  4855.  
  4856. Format of DISKMON.INI file:
  4857. Offset    Size    Description    (Table 2291)
  4858. -6Ch 108 BYTEs    (in memory copy only)
  4859.         list of filenames which are always protected:
  4860.           IBMBIO.COM/IBMDOS.COM, IO.SYS/MSDOS.SYS, TBIOS.SYS/TDOS.SYS,
  4861.           MIO.SYS/IO.BIN, COMMAND.COM
  4862.  00h    BYTE    ??? always 01h
  4863.  01h    BYTE    disk light (00h off, 01h on)
  4864.  02h    BYTE    disk protection (00h off, 01h on)
  4865.  03h    BYTE    protected areas
  4866.         01h system area
  4867.         02h files
  4868.         03h system area and files
  4869.         04h entire disk
  4870.  04h    BYTE    floppy access (00h not allowed, 01h allowed)
  4871.  05h 27 BYTEs    filename extension list (9 entries)
  4872.         (lowercase, blank padded or = 000000h)
  4873.  20h 240 BYTEs    filename list (20 entries)
  4874.         (lowercase, name and extension blank padded, with '.')
  4875. Note:    CX:0508h -> copy in installed TSR (v5)
  4876.     CX:052Fh -> copy in installed TSR (v6)
  4877.     CX:04E0h -> copy in installed TSR (v7-v8)
  4878.  
  4879. Format of FILESAVE.INI / EP.INI / SMARTCAN.INI file:
  4880. Offset    Size    Description    (Table 2292)
  4881.  00h 26 BITs    drive list (bit set: file protection on, cleared: off):
  4882.  00h    BYTE    drives    A: - H:
  4883.  01h    BYTE    drives    I: - P:
  4884.  02h    BYTE    drives    Q: - X:
  4885.  03h    BYTE    drives    Y: - Z:
  4886.  04h    BYTE    which files to protect
  4887.         00h all files
  4888.         01h all files with extension in list
  4889.         02h all files except those with extension in list
  4890.  05h 27 BYTEs    filename extension list (9 entries, uppercase, ASCIZ)
  4891.  20h    BYTE    include files with archive bit clear (00h no, 01h yes)
  4892.  21h    WORD    number of days after which files are purged (0 = never)
  4893.  23h    WORD    max kilobytes of erased file space to hold (0 = all)
  4894. Note:    CX:03D2h -> copy in installed TSR (v5)
  4895.     CX:03F5h -> copy in installed TSR (v6)
  4896.     CX:0434h -> copy in installed TSR (v7-v8)
  4897. --------U-2FFE00DX474F-----------------------
  4898. INT 2F - GO! v3.22+ - API
  4899.     AX = FE00h
  4900.     DX = 474Fh ('GO')
  4901.     SI = function number
  4902.         0063h (BCD for '?') installation check
  4903.         0078h (BCD for 'N') non-registered search (two levels only)
  4904.         0082h (BCD for 'R') reserved for registered version
  4905.         0083h (BCD for 'S') reserved for registered version
  4906.         0085h (BCD for 'U') uninstall
  4907.     BX:CX -> buffer (for search functions)
  4908.         buffer filled with search spec, i.e. "APL" to get first
  4909.           directory containing the substring APL, ":\APL" to find
  4910.           the first top-level directory beginning with the letters
  4911.           APL
  4912. Return: BX:CX buffer filled with result (search functions only)
  4913.         result is counted ASCIZ directory name, empty string if
  4914.         no matches (i.e. first byte is length of name, followed by
  4915.         name)
  4916. Program: GO! is a shareware directory locator TSR by Steve Ryckman
  4917. Note:    the application-supplied buffer for the requests and results which
  4918.       BX:CX points at must lie outside the conventional (low-640K)
  4919.       memory, since the TSR swaps memory on pop-up; a common location is
  4920.       the last 96 bytes of the video memory or a UMB
  4921. --------U-2FFE01DI4E55-----------------------
  4922. INT 2F U - NORTON UTILITIES 5.0+ TSRs - ENABLE
  4923.     AX = FE01h
  4924.     DI = 4E55h ("NU")
  4925.     SI = TSR identifier (see #2290)
  4926. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  4927.     AX = status
  4928.         0002h successful (DISKMON, FILESAVE, EP)
  4929.         FE00h successful (NCACHE-x, DISKREET)
  4930. Notes:    if the enable/disable calls are used on DISKMON or NCACHE-x, the status
  4931.       report generated by the programs still indicates the previous state,
  4932.       and DISKMON.INI is not updated
  4933.     apparently has no effect on DISKREET
  4934. SeeAlso: AX=FE00h,AX=FE02h
  4935. --------U-2FFE02DI4E55-----------------------
  4936. INT 2F U - NORTON UTILITIES 5.0+ TSRs - DISABLE
  4937.     AX = FE02h
  4938.     DI = 4E55h ("NU")
  4939.     SI = TSR identifier (see #2290)
  4940. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  4941.     AX = status
  4942.         0004h successful (DISKMON, FILESAVE)
  4943.         FE00h successful (NCACHE-x, DISKREET)
  4944. Notes:    (see also AX=FE01h)
  4945.     this function appears to be unsafe, as the cache buffers are not
  4946.       flushed
  4947. SeeAlso: AX=FE00h,AX=FE01h
  4948. --------U-2FFE03DI4E55-----------------------
  4949. INT 2F U - NORTON UTILITIES 5.0+ TSRs - FLUSH BUFFERS
  4950.     AX = FE03h
  4951.     DI = 4E55h ("NU")
  4952.     SI = TSR identifier (see #2290)
  4953. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  4954.     AX = status
  4955.         0006h successful???
  4956. Notes:    only supported by DISKMON, FILESAVE, and NCACHE-x
  4957.     useful for flushing NCACHE before rebooting
  4958. SeeAlso: AX=FE00h,AX=FE10h
  4959. --------U-2FFE04DI4E55-----------------------
  4960. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  4961.     AX = FE04h
  4962.     DI = 4E55h ("NU")
  4963.     SI = TSR identifier (see #2290)
  4964. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  4965.     AX = status
  4966.         0008h successful???
  4967. SeeAlso: AX=FE00h
  4968. --------U-2FFE05DI4E55-----------------------
  4969. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  4970.     AX = FE05h
  4971.     DI = 4E55h ("NU")
  4972.     SI = TSR identifier (see #2290)
  4973. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  4974.     AX = status
  4975.         000Ah successful???
  4976. Note:    reportedly dangerous
  4977. SeeAlso: AX=FE00h
  4978. --------N-2FFE08-----------------------------
  4979. INT 2F - PC-NFS ??? - GET ???
  4980.     AX = FE08h
  4981. Return: ES:BX -> ???
  4982. Notes:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  4983.     both the driver responding to AX=FE00h/DX=4E4Dh and the one responding
  4984.       to AX=FE00h/DX=544Dh support this function
  4985. SeeAlso: AX=FE00h/BX=4454h
  4986. --------U-2FFE10DI4E55-----------------------
  4987. INT 2F U - NORTON UTILITIES 6.0 NCACHE - REBOOT
  4988.     AX = FE10h
  4989.     DI = 4E55h ("NU")
  4990.     SI = TSR identifier (see #2290)
  4991. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  4992.     AX = status
  4993. Note:    probably used to flush NCACHE buffers and reboot when Ctrl-Alt-Del is
  4994.       detected
  4995. SeeAlso: AX=FE03h
  4996. --------S-2FFEEF-----------------------------
  4997. INT 2F - RTS Control TSR - INSTALLATION CHECK
  4998.     AX = FEEFh
  4999. Return: AX = EFFEh if installed
  5000.         BX = port address
  5001. Program: RTS Control TSR is a utility by Michal Szokolo to lower the RTS
  5002.       signal on a COM port during disk accesses to avoid losing incoming
  5003.       data
  5004. --------N-2FFF00-----------------------------
  5005. INT 2F - Topware Network Operating System - INSTALLATION CHECK
  5006.     AX = FF00h
  5007. Return: AL = status
  5008.         00h not installed, OK to install
  5009.         01h not installed, not OK to install
  5010.         FFh installed
  5011. SeeAlso: AX=FF01h,AX=FF02h,AX=FF10h,INT 21/AX=FF00h"Topware",INT 7A"Topware"
  5012. --------N-2FFF01-----------------------------
  5013. INT 2F - Topware Network Operating System - GET VERSION
  5014.     AX = FF01h
  5015. Return: AX = version
  5016. SeeAlso: AX=FF00h,AX=FF02h
  5017. --------N-2FFF02-----------------------------
  5018. INT 2F - TopWare Network OS v5.10+ - GET TopNet VERSION STRING
  5019.     AX = FF02h
  5020. Return: ES:BX -> version string
  5021. SeeAlso: AX=FF00h,AX=FF01h
  5022. --------N-2FFF10-----------------------------
  5023. INT 2F - TopWare Network OS v5.10+ - TopTerm - INSTALLATION CHECK
  5024.     AX = FF10h
  5025. Return: AL = status (00h not installed, 01h installed)
  5026. SeeAlso: AX=FF00h,AX=FF11h,AX=FF12h,AX=FF13h
  5027. --------N-2FFF11-----------------------------
  5028. INT 2F - TopWare Network OS v5.10+ - TopTerm - ENABLE KEYBOARD SERVICE
  5029.     AX = FF11h
  5030. Note:    this function is only available on workstations, not on the server
  5031. SeeAlso: AX=FF10h,AX=FF12h
  5032. --------N-2FFF12-----------------------------
  5033. INT 2F - TopWare Network OS v5.10+ - TopTerm - DISABLE KEYBOARD SERVICE
  5034.     AX = FF12h
  5035. Note:    this function is only available on workstations, not on the server
  5036. SeeAlso: AX=FF10h,AX=FF11h
  5037. --------N-2FFF13-----------------------------
  5038. INT 2F - TopWare Network OS v5.10+ - TopTerm - SET INSTALLATION FLAG
  5039.     AX = FF13h
  5040.     CL = new state (00h off, 01h on)
  5041. SeeAlso: AX=FF10h
  5042. --------N-2FFF14-----------------------------
  5043. INT 2F - TopWare Network OS v5.10+ - START BACKGROUND RECEIVE VIDEO DATA
  5044.     AX = FF14h
  5045. Note:    this function is only available on workstations, not on the server
  5046. SeeAlso: AX=FF10h,AX=FF15h
  5047. --------N-2FFF15-----------------------------
  5048. INT 2F - TopWare Network OS v5.10+ - END BACKGROUND RECEIVE VIDEO DATA
  5049.     AX = FF15h
  5050. Note:    this function is only available on workstations, not on the server
  5051. SeeAlso: AX=FF10h,AX=FF14h
  5052. --------N-2FFF16-----------------------------
  5053. INT 2F - TopWare Network OS v5.10+ - SET CONTROL NUMBER OF "SHOW" SCREEN
  5054.     AX = FF16h
  5055.     BL = which to set (00h TopShow, FFh TopTerm)
  5056.     CX = destination screen
  5057.         0000h all stations
  5058.         0000h-00FFh (TopTerm only) send to group CL
  5059.         8001h-80FEh send to station CL
  5060. SeeAlso: AX=FF18h
  5061. --------N-2FFF18-----------------------------
  5062. INT 2F - TopWare Network OS v5.10+ - SEND FULL SCREEN OF DATA FOR TopShow
  5063.     AX = FF18h
  5064. SeeAlso: AX=FF00h,AX=FF16h,AX=FF27h
  5065. --------N-2FFF23-----------------------------
  5066. INT 2F - TopWare Network OS v5.10+ - CLOSE SPOOL FILES AND START PRINTING
  5067.     AX = FF23h
  5068. SeeAlso: AX=FF00h
  5069. --------N-2FFF27-----------------------------
  5070. INT 2F - TopWare Network OS v5.10+ - GET "SHOW" TYPE
  5071.     AX = FF27h
  5072. Return: AL = type (00h complete version, 01h simple version)
  5073.     BL = "show" functions flag (00h disabled, 01h enabled)
  5074. SeeAlso: AX=FF16h,AX=FF18h
  5075. --------D-30---------------------------------
  5076. INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls
  5077.    the CALL 5 entry point does a FAR jump to here
  5078. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  5079.       memory
  5080. SeeAlso: INT 21/AH=26h
  5081. --------V-30---------------------------------
  5082. INT 30 - QRIP/TSR - USED BY GRAPHICS LIBRARY
  5083. Program: QRIP/TSR is a shareware TSR by Shane Hathaway implementing the Remote
  5084.       Imaging Protocol (RIP, RIPscrip) used by several BBS systems to
  5085.       provide a graphical user interface
  5086. SeeAlso: INT 2F/AX=ACF0h
  5087. --------D-31---------------------------------
  5088. INT 31 - overwritten by CP/M jump instruction in INT 30
  5089. --------v-31---------------------------------
  5090. INT 31 - VIRUS - "Vacsina" series - INSTALLATION CHECK (NOT A VECTOR!)
  5091. Note:    if one of the Vacsina viruses is resident, the low byte of this
  5092.       interrupt still contains the last byte of the INT 30 CP/M JMP
  5093.       instruction, but the remaining three bytes are 7Fh 39h followed
  5094.       by the Vacsina version number
  5095. SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 32"VIRUS"
  5096. --------E-310000-----------------------------
  5097. INT 31 P - DPMI 0.9+ - ALLOCATE LDT DESCRIPTORS
  5098.     AX = 0000h
  5099.     CX = number of descriptors to allocate
  5100. Return: CF clear if successful
  5101.         AX = base selector
  5102.     CF set on error
  5103.         AX = error code (DPMI 1.0+) (see #2293)
  5104. Notes:    DPMI is the DOS Protected-Mode Interface
  5105.     the base and limit of the returned descriptors will be 0, and the type
  5106.       will be "data"
  5107.     add the value returned by INT 31/AX=0003h to move to subsequent
  5108.       descriptors if multiple descriptors were allocated
  5109.     not supported by MS Windows 3.0 in Standard mode
  5110. SeeAlso: AX=0001h,AX=000Dh,INT 21/AX=3501h
  5111.  
  5112. (Table 2293)
  5113. Values for DPMI 1.0 error code:
  5114.  0000h-7FFFh DOS error passed through by DPMI
  5115.  8001h    unsupported function
  5116.  8002h    object in wrong state for function
  5117.  8003h    system integrity would be endangered
  5118.  8004h    deadlock detected
  5119.  8005h    pending serialization request cancelled
  5120.  8010h    out of DPMI internal resources
  5121.  8011h    descriptor unavailable
  5122.  8012h    linear memory unavailable
  5123.  8013h    physical memory unavailable
  5124.  8014h    backing store unavailable
  5125.  8015h    callback unavailable
  5126.  8016h    handle unavailable
  5127.  8017h    maximum lock count exceeded
  5128.  8018h    shared memory already serialized exclusively by another
  5129.  8019h    shared memory already serialized shared by another client
  5130.  8021h    invalid value for numeric or flag parameter
  5131.  8022h    invalid segment selector
  5132.  8023h    invalid handle
  5133.  8024h    invalid callback
  5134.  8025h    invalid linear address
  5135.  8026h    request not supported by hardware
  5136. --------E-310001-----------------------------
  5137. INT 31 P - DPMI 0.9+ - FREE LDT DESCRIPTOR
  5138.     AX = 0001h
  5139.     BX = selector to free
  5140. Return: CF clear if successful
  5141.     CF set on error
  5142.         AX = error code (DPMI 1.0+) (8022h) (see #2293)
  5143. Notes:    only one descriptor is freed per call
  5144.     the program's initial CS, DS, and SS descriptors may be freed
  5145.     (DPMI 1.0+) any segment registers containing the freed selector are
  5146.       set to 0000h
  5147.     not supported by MS Windows 3.0 in Standard mode
  5148. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh,INT 21/AX=3502h
  5149. --------E-310002-----------------------------
  5150. INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR
  5151.     AX = 0002h
  5152.     BX = real mode segment
  5153. Return: CF clear if successful
  5154.         AX = selector corresponding to real mode segment (64K limit)
  5155.     CF set on error
  5156.         AX = error code (DPMI 1.0+) (8011h) (see #2293)
  5157. Notes:    multiple calls for the same real mode segment return the same selector
  5158.     the returned descriptor can never be modified or freed
  5159.     not supported by MS Windows 3.0 in Standard mode
  5160. --------E-310003-----------------------------
  5161. INT 31 P - DPMI 0.9+ - GET NEXT SELECTOR INCREMENT VALUE
  5162.     AX = 0003h
  5163. Return: CF clear
  5164.         AX = value to add to get next sequential selector
  5165. Notes:    the increment will be a power of two
  5166.     not supported by MS Windows 3.0 in Standard mode
  5167. SeeAlso: AX=0000h
  5168. --------E-310004-----------------------------
  5169. INT 31 P - DPMI 0.9+ - LOCK SELECTOR
  5170.     AX = 0004h
  5171.     BX = selector to lock (prevent paging)
  5172. Return: ???
  5173. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  5174.       specification, this function is called by MS Windows TASKMAN,
  5175.       PROGMAN, and KERNEL
  5176. SeeAlso: AX=0005h,AX=0600h
  5177. --------E-310005-----------------------------
  5178. INT 31 P - DPMI 0.9+ - UNLOCK SELECTOR
  5179.     AX = 0005h
  5180.     BX = selector to unlock (permit paging)
  5181. Return: ???
  5182. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  5183.       specification, this function is called by MS Windows TASKMAN,
  5184.       PROGMAN, and KERNEL
  5185. SeeAlso: AX=0004h,AX=0601h
  5186. --------E-310006-----------------------------
  5187. INT 31 P - DPMI 0.9+ - GET SEGMENT BASE ADDRESS
  5188.     AX = 0006h
  5189.     BX = selector
  5190. Return: CF clear if successful
  5191.         CX:DX = linear base address of segment
  5192.     CF set on error
  5193.         AX = error code (DPMI 1.0+) (8022h) (see #2293)
  5194. Note:    not supported by MS Windows 3.0 in Standard mode
  5195. SeeAlso: AX=0007h,INT 21/AX=3504h
  5196. --------E-310007-----------------------------
  5197. INT 31 P - DPMI 0.9+ - SET SEGMENT BASE ADDRESS
  5198.     AX = 0007h
  5199.     BX = selector
  5200.     CX:DX = linear base address
  5201. Return: CF clear if successful
  5202.     CF set on error
  5203.         AX = error code (DPMI 1.0+) (8022h,8025h) (see #2293)
  5204. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  5205.     only the low 24 bits of the address will be used by 16-bit DPMI
  5206.       implementations even on a 386 or higher
  5207.     DPMI 1.0+ automatically reloads any segment registers containing the
  5208.       selector being modified
  5209.     not supported by MS Windows 3.0 in Standard mode
  5210. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AX=3503h
  5211. SeeAlso: INT 21/AH=E9h"OS/286",INT 2C/AX=0002h
  5212. --------E-310008-----------------------------
  5213. INT 31 P - DPMI 0.9+ - SET SEGMENT LIMIT
  5214.     AX = 0008h
  5215.     BX = selector
  5216.     CX:DX = segment limit
  5217. Return: CF clear if successful
  5218.     CF set on error
  5219.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #2293)
  5220. Notes:    CX must be zero for 16-bit DPMI implementations
  5221.     limits greater than 1MB must be page aligned (low 12 bits set)
  5222.     only modify descriptors allocated with INT 31/AX=0000h
  5223.     DPMI 1.0+ automatically reloads any segment registers containing the
  5224.       selector being modified
  5225.     not supported by MS Windows 3.0 in Standard mode
  5226. SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AX=3505h,INT 21/AH=E9h"OS/286"
  5227. SeeAlso: INT 2C/AX=0003h,#0395 at INT 15/AH=89h
  5228. --------E-310009-----------------------------
  5229. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR ACCESS RIGHTS
  5230.     AX = 0009h
  5231.     BX = selector
  5232.     CL = access rights/type byte (see #0396 at INT 15/AH=89h)
  5233.     CH = 80386 extended rights/type byte (see #0397 at INT 15/AH=89h)
  5234.         (32-bit DPMI implementations only)
  5235. Return: CF clear if successful
  5236.     CF set on error
  5237.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #2293)
  5238. Notes:    if the Present bit is clear, CL bits 0-3 may have any value
  5239.     DPMI 1.0+ automatically reloads any segment registers containing the
  5240.       selector being modified
  5241.     not supported by MS Windows 3.0 in Standard mode
  5242. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h,INT 2C/AX=0004h
  5243. SeeAlso: INT 2C/AX=0005h
  5244. --------E-31000A-----------------------------
  5245. INT 31 P - DPMI 0.9+ - CREATE ALIAS DESCRIPTOR
  5246.     AX = 000Ah
  5247.     BX = selector
  5248. Return: CF clear if successful
  5249.         AX = new data selector
  5250.     CF set on error
  5251.         AX = error code (DPMI 1.0+) (8011h,8022h) (see #2293)
  5252. Notes:    fails if selector in BX is not a code segment or is invalid
  5253.     use INT 31/AX=0001h to free new selector
  5254.     future changes to the original selector will not be reflected in the
  5255.       returned alias selector
  5256.     not supported by MS Windows 3.0 in Standard mode
  5257. SeeAlso: AX=0001h
  5258. --------E-31000B-----------------------------
  5259. INT 31 P - DPMI 0.9+ - GET DESCRIPTOR
  5260.     AX = 000Bh
  5261.     BX = LDT selector
  5262.     ES:(E)DI -> 8-byte buffer for copy of descriptor
  5263. Return: CF clear if successful
  5264.         buffer filled
  5265.     CF set on error
  5266.         AX = error code (DPMI 1.0+) (8022h) (see #2293)
  5267. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  5268.     not supported by MS Windows 3.0 in Standard mode
  5269. SeeAlso: AX=000Ch
  5270. --------E-31000C-----------------------------
  5271. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR
  5272.     AX = 000Ch
  5273.     BX = LDT selector
  5274.     ES:(E)DI -> 8-byte buffer containing descriptor
  5275. Return: CF clear if successful
  5276.     CF set on error
  5277.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #2293)
  5278. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  5279.     only modify descriptors allocated with INT 31/AX=0000h
  5280.     DPMI 1.0+ automatically reloads any segment registers containing the
  5281.       selector being modified
  5282.     not supported by MS Windows 3.0 in Standard mode
  5283. SeeAlso: AX=000Bh
  5284. --------E-31000D-----------------------------
  5285. INT 31 P - DPMI 0.9+ - ALLOCATE SPECIFIC LDT DESCRIPTOR
  5286.     AX = 000Dh
  5287.     BX = LDT selector
  5288. Return: CF clear if successful
  5289.         descriptor allocated
  5290.     CF set on error
  5291.         AX = error code (DPMI 1.0+) (8011h,8022h) (see #2293)
  5292. Notes:    free descriptor with INT 31/AX=0001h
  5293.     the first 16 descriptors (04h-7Ch) are reserved for this function, but
  5294.       some may already be in use by other applications under DPMI 0.9;
  5295.       DPMI 1.0 guarantees 16 descriptors per client
  5296.     not supported by MS Windows 3.0 in Standard mode
  5297. SeeAlso: AX=0000h,AX=0001h
  5298. --------E-31000E-----------------------------
  5299. INT 31 P - DPMI 1.0+ - GET MULTIPLE DESCRIPTORS
  5300.     AX = 000Eh
  5301.     CX = number of descriptors to copy
  5302.     ES:(E)DI -> descriptor buffer (see #2294)
  5303. Return: CF clear if successful
  5304.         descriptors copied
  5305.     CF set on error
  5306.         AX = error code (8022h) (see #2293)
  5307.         CX = number of descriptors successfully copied
  5308. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  5309.     if the function fails, the first CX descriptors are valid; the
  5310.       remainder are not modified
  5311. SeeAlso: AX=000Bh,AX=000Fh
  5312.  
  5313. Format of DPMI descriptor buffer entry (one per descriptor to get):
  5314. Offset    Size    Description    (Table 2294)
  5315.  00h    WORD    selector (set by client)
  5316.  02h    QWORD    descriptor (set by host)
  5317. --------E-31000F-----------------------------
  5318. INT 31 P - DPMI 1.0+ - SET MULTIPLE DESCRIPTORS
  5319.     AX = 000Fh
  5320.     CX = number of descriptors to copy
  5321.     ES:(E)DI -> descriptor buffer (see #2295)
  5322. Return: CF clear if successful
  5323.         descriptors copied
  5324.     CF set on error
  5325.         AX = error code (8021h,8022h,8025h) (see #2293)
  5326.         CX = number of descriptors successfully copied
  5327. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  5328.     if the function fails, the first CX descriptors are valid; the
  5329.       remainder are not modified
  5330.     DPMI 1.0+ automatically reloads any segment registers containing a
  5331.       selector being modified
  5332. SeeAlso: AX=000Ch,AX=000Eh
  5333.  
  5334. Format of DPMI descriptor buffer entry (one per descriptor to set):
  5335. Offset    Size    Description    (Table 2295)
  5336.  00h    WORD    selector
  5337.  02h    QWORD    descriptor
  5338. --------E-310100-----------------------------
  5339. INT 31 P - DPMI 0.9+ - ALLOCATE DOS MEMORY BLOCK
  5340.     AX = 0100h
  5341.     BX = number of paragraphs to allocate
  5342. Return: CF clear if successful
  5343.         AX = real mode segment of allocated block
  5344.         DX = first selector for allocated block
  5345.     CF set on error
  5346.         AX = DOS error code (07h,08h) (see #0960 at INT 21/AH=59h)
  5347.         (DPMI 1.0+) DPMI error code (8011h) (see #2293)
  5348.         BX = size (in paragraphs) of largest available block
  5349. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  5350.       if the caller is a 16-bit program
  5351.     never modify or deallocate returned descriptors
  5352.     not supported by MS Windows 3.0 in Standard mode
  5353. SeeAlso: AX=0101h,AX=0501h
  5354. --------E-310101-----------------------------
  5355. INT 31 P - DPMI 0.9+ - FREE DOS MEMORY BLOCK
  5356.     AX = 0101h
  5357.     DX = selector of block
  5358. Return: CF set if successful
  5359.     CF set on error
  5360.         AX = DOS error code (07h,09h) (see #0960 at INT 21/AH=59h)
  5361. Notes:    all descriptors allocated for the block are automatically freed
  5362.     DPMI 1.0+ automatically zeros any segment registers containing a
  5363.       selector freed by this function
  5364.     not supported by MS Windows 3.0 in Standard mode
  5365. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  5366. --------E-310102-----------------------------
  5367. INT 31 P - DPMI 0.9+ - RESIZE DOS MEMORY BLOCK
  5368.     AX = 0102h
  5369.     BX = new block size in paragraphs
  5370.     DX = selector of block
  5371. Return: CF clear if successful
  5372.     CF set on error
  5373.         AX = DOS error code (07h,08h,09h) (see #0960 at INT 21/AH=59h)
  5374.         (DPMI 1.0+) DPMI error code (8011h,8022h) (see #2293)
  5375.         BX = maximum block size (in paragraphs) possible
  5376. Notes:    increasing the size of a block past a 64K boundary will fail if the
  5377.       next descriptor in the LDT is already in use
  5378.     shrinking a block past a 64K boundary will cause some selectors to be
  5379.       freed; DPMI 1.0+ automatically zeros any segment registers containing
  5380.       a selector freed by this function
  5381.     not supported by MS Windows 3.0 in Standard mode
  5382. SeeAlso: AX=0100h
  5383. --------E-310200-----------------------------
  5384. INT 31 P - DPMI 0.9+ - GET REAL MODE INTERRUPT VECTOR
  5385.     AX = 0200h
  5386.     BL = interrupt number
  5387. Return: CF clear
  5388.     CX:DX = segment:offset of real mode interrupt handler
  5389. Note:    the DPMI implementation is required to support all 256 vectors
  5390. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h
  5391. --------E-310201-----------------------------
  5392. INT 31 P - DPMI 0.9+ - SET REAL MODE INTERRUPT VECTOR
  5393.     AX = 0201h
  5394.     BL = interrupt number
  5395.     CX:DX = segment:offset of real mode handler
  5396. Return: CF clear
  5397. Note:    all memory that may be touched by a hardware interrupt handler must be
  5398.       locked down with INT 31/AX=0600h
  5399. SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h
  5400. --------E-310202-----------------------------
  5401. INT 31 P - DPMI 0.9+ - GET PROCESSOR EXCEPTION HANDLER VECTOR
  5402.     AX = 0202h
  5403.     BL = exception number (00h-1Fh)
  5404. Return: CF clear if successful
  5405.         CX:(E)DX = selector:offset of handler
  5406.     CF set on error
  5407.         AX = error code (DPMI 1.0+) (8021h) (see #2293)
  5408. Notes:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  5409.     DPMI 1.0+ supports this function only for backward compatibility; use
  5410.        AX=0210h or AX=0211h instead
  5411.     not supported by MS Windows 3.0 in Standard mode
  5412. SeeAlso: AX=0203h,AX=0210h,AX=0211h,INT 2F/AX=FB42h/BX=0021h
  5413. --------E-310203-----------------------------
  5414. INT 31 P - DPMI 0.9+ - SET PROCESSOR EXCEPTION HANDLER VECTOR
  5415.     AX = 0203h
  5416.     BL = exception number (00h-1Fh)
  5417.     CX:(E)DX = selector:offset of handler
  5418. Return: CF clear if successful
  5419.     CF set on error
  5420.         AX = error code (DPMI 1.0+) (8021h,8022h) (see #2293)
  5421. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  5422.       stack frame on chaining to the next exception handler
  5423.     the handler should return using a FAR return
  5424.     all fault stack frames contain an error code, but it is only valid for
  5425.       exceptions 08h and 0Ah-0Eh
  5426.     handlers will only be called if the exception occurs in protected mode,
  5427.       and the DPMI host does not transparently handle the exception
  5428.     the handler may change certain values on the stack frame
  5429.       (see #2296,#2297)
  5430.     DPMI 1.0+ supports this function only for backward compatibility; use
  5431.        AX=0212h or AX=0213h instead
  5432.     not supported by MS Windows 3.0 in Standard mode
  5433. SeeAlso: AX=0202h,AX=0212h,AX=0213h,INT 2F/AX=FB42h/BX=0022h
  5434.  
  5435. Format of stack frame for 16-bit programs: (offset from SS:SP)
  5436. Offset    Size    Description    (Table 2296)
  5437.  00h    DWORD    return CS:IP (do not change)
  5438.  04h    WORD    error code
  5439.  06h    DWORD    CS:IP of exception
  5440.  0Ah    WORD    flags
  5441.  0Ch    DWORD    SS:SP
  5442.  
  5443. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  5444. Offset    Size    Description    (Table 2297)
  5445.  00h    DWORD    return EIP (do not change)
  5446.  04h    WORD    return CS selector (do not change)
  5447.  06h    WORD    reserved (do not change)
  5448.  08h    DWORD    error code
  5449.  0Ch    DWORD    EIP of exception
  5450.  10h    WORD    CS selector of exception
  5451.  12h    WORD    reserved (do not change)
  5452.  14h    DWORD    EFLAGS
  5453.  18h    DWORD    ESP
  5454.  1Ch    WORD    SS
  5455.  1Eh    WORD    reserved (do not change)
  5456. --------E-310204-----------------------------
  5457. INT 31 P - DPMI 0.9+ - GET PROTECTED MODE INTERRUPT VECTOR
  5458.     AX = 0204h
  5459.     BL = interrupt number
  5460. Return: CF clear
  5461.     CX:(E)DX = selector:offset of handler
  5462. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  5463.     DPMI implementations are required to support all 256 vectors
  5464.     not supported by MS Windows 3.0 in Standard mode
  5465. SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h,INT 2C/AX=0006h
  5466. SeeAlso: INT 2F/AX=FB42h/BX=0024h
  5467. --------E-310205-----------------------------
  5468. INT 31 P - DPMI 0.9+ - SET PROTECTED MODE INTERRUPT VECTOR
  5469.     AX = 0205h
  5470.     BL = interrupt number
  5471.     CX:(E)DX = selector:offset of handler
  5472. Return: CF clear if successful
  5473.     CF set on error
  5474.         AX = error code (DPMI 1.0+) (8022h) (see #2293)
  5475. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  5476.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  5477.       to the next handler
  5478.     DPMI implementations are required to support all 256 vectors
  5479.     hardware interrupts are reflected to the virtual machine's primary
  5480.       client, software interrupts to the current client
  5481.     not supported by MS Windows 3.0 in Standard mode
  5482. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h,INT 2C/AX=0007h
  5483. SeeAlso: INT 2F/AX=FB42h/BX=0025h
  5484. --------E-310210-----------------------------
  5485. INT 31 P - DPMI 1.0+ - GET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  5486.     AX = 0210h
  5487.     BL = exception number (00h-1Fh)
  5488. Return: CF clear if successful
  5489.         CX:(E)DX = selector:offset of exception handler
  5490.     CF set on error
  5491.         AX = error code (8021h) (see #2293)
  5492. Note:    DPMI host reflects exception to current client's handler
  5493. SeeAlso: AX=0202h,AX=0211h,AX=0212h
  5494. --------E-310211-----------------------------
  5495. INT 31 P - DPMI 1.0+ - GET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  5496.     AX = 0211h
  5497.     BL = exception number (00h-1Fh)
  5498. Return: CF clear if successful
  5499.         CX:(E)DX = selector:offset of exception handler
  5500.     CF set on error
  5501.         AX = error code (8021h) (see #2293)
  5502. Notes:    returns address of protected-mode handler for real-mode exception
  5503.     DPMI host performs a switch to protected mode, reflects the exception
  5504.       to the virtual machine's primary client, and returns to real mode
  5505.       on the handler's completion
  5506. SeeAlso: AX=0202h,AX=0210h,AX=0213h
  5507. --------E-310212-----------------------------
  5508. INT 31 P - DPMI 1.0+ - SET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  5509.     AX = 0212h
  5510.     BL = exception or fault number (00h-1Fh)
  5511.     CX:(E)DX = exception handler selector:offset
  5512. Return: CF clear if successful
  5513.     CF set on error
  5514.         AX = error code (8021h,8022h) (see #2293)
  5515. Note:    DPMI host sends exception to current client's handler
  5516. SeeAlso: AX=0203h,AX=0210h,AX=0213h
  5517. --------E-310213-----------------------------
  5518. INT 31 P - DPMI 1.0+ - SET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  5519.     AX = 0213h
  5520.     BL = exception or fault number (00h-1Fh)
  5521.     CX:(E)DX = exception handler selector:offset
  5522. Return: CF clear if successful
  5523.     CF set on error
  5524.         AX = error code (8021h,8022h) (see #2293)
  5525. Notes:    specifies address of protected-mode handler for real-mode exception
  5526.     DPMI host performs a switch to protected mode, reflects the exception
  5527.       to the virtual machine's primary client, and returns to real mode
  5528.       on the handler's completion
  5529. SeeAlso: AX=0203h,AX=0211h,AX=0212h
  5530. --------E-310300-----------------------------
  5531. INT 31 P - DPMI 0.9+ - SIMULATE REAL MODE INTERRUPT
  5532.     AX = 0300h
  5533.     BL = interrupt number
  5534.     BH = flags
  5535.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  5536.             reserved, must be 0 (DPMI 1.0+)
  5537.         others: reserved, must be 0
  5538.     CX = number of words to copy from protected mode to real mode stack
  5539.     ES:(E)DI = selector:offset of real mode call structure (see #2298)
  5540. Return: CF clear if successful
  5541.         real mode call structure modified (all fields except SS:SP, CS:IP
  5542.           filled with return values from real mode interrupt)
  5543.     CF set on error
  5544.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #2293)
  5545.     protected mode stack unchanged
  5546. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  5547.     CS:IP in the real mode call structure is ignored for this call,
  5548.       instead, the indicated interrupt vector is used for the address
  5549.     the flags in the call structure are pushed on the real mode stack to
  5550.       form an interrupt stack frame, and the trace and interrupt flags are
  5551.       clear on entry to the handler
  5552.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  5553.     the real mode handler must return with the stack in the same state as
  5554.       it was on being called
  5555. SeeAlso: AX=0302h,AX=FF01h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286"
  5556. SeeAlso: INT 2C/AX=0026h,INT 2F/AX=FB42h/BX=000Dh
  5557.  
  5558. Format of DPMI real mode call structure:
  5559. Offset    Size    Description    (Table 2298)
  5560.  00h    DWORD    EDI
  5561.  04h    DWORD    ESI
  5562.  08h    DWORD    EBP
  5563.  0Ch    DWORD    reserved (00h)
  5564.  10h    DWORD    EBX
  5565.  14h    DWORD    EDX
  5566.  18h    DWORD    ECX
  5567.  1Ch    DWORD    EAX
  5568.  20h    WORD    flags
  5569.  22h    WORD    ES
  5570.  24h    WORD    DS
  5571.  26h    WORD    FS
  5572.  28h    WORD    GS
  5573.  2Ah    WORD    IP
  5574.  2Ch    WORD    CS
  5575.  2Eh    WORD    SP
  5576.  30h    WORD    SS
  5577. --------E-310301-----------------------------
  5578. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME
  5579.     AX = 0301h
  5580.     BH = flags
  5581.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  5582.             reserved, must be 0 (DPMI 1.0+)
  5583.         others: reserved must be 0
  5584.     CX = number of words to copy from protected mode to real mode stack
  5585.     ES:(E)DI = selector:offset of real mode call structure
  5586.           (see #2298 at INT 31/AX=0300h)
  5587. Return: CF clear if successful
  5588.         real mode call structure modified (all fields except SS:SP, CS:IP
  5589.           filled with return values from real mode interrupt)
  5590.     CF set on error
  5591.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #2293)
  5592.     protected mode stack unchanged
  5593. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  5594.     the real mode procedure must exit with a FAR return
  5595.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  5596.     the real mode handler must return with the stack in the same state as
  5597.       it was on being called
  5598. SeeAlso: AX=0300h,AX=0302h,AX=FF02h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286"
  5599. SeeAlso: INT 2C/AX=0025h
  5600. --------E-310302-----------------------------
  5601. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH IRET FRAME
  5602.     AX = 0302h
  5603.     BH = flags
  5604.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  5605.             reserved, must be 0 (DPMI 1.0+)
  5606.         others: reserved, must be 0
  5607.     CX = number of words to copy from protected mode to real mode stack
  5608.     ES:(E)DI = selector:offset of real mode call structure
  5609.           (see #2298 at INT 31/AX=0300h)
  5610. Return: CF clear if successful
  5611.         real mode call structure modified (all fields except SS:SP, CS:IP
  5612.           filled with return values from real mode interrupt)
  5613.     CF set on error
  5614.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #2293)
  5615.     protected mode stack unchanged
  5616. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  5617.     the flags in the call structure are pushed on the real mode stack to
  5618.       form an interrupt stack frame, and the trace and interrupt flags are
  5619.       clear on entry to the handler
  5620.     the real mode procedure must exit with an IRET
  5621.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  5622.     the real mode handler must return with the stack in the same state as
  5623.       it was on being called
  5624. SeeAlso: AX=0300h
  5625. --------E-310303-----------------------------
  5626. INT 31 P - DPMI 0.9+ - ALLOCATE REAL MODE CALLBACK ADDRESS
  5627.     AX = 0303h
  5628.     DS:(E)SI = selector:offset of procedure to call
  5629.     ES:(E)DI = selector:offset of real mode call structure (see #2298)
  5630. Return: CF clear if successful
  5631.         CX:DX = segment:offset of real mode call address (see #2299)
  5632.     CF set on error
  5633.         AX = error code (DPMI 1.0+) (8015h) (see #2293)
  5634. Notes:    the real mode call structure is static, causing reentrancy problems;
  5635.       its contents are only valid at the time of a callback
  5636.     the called procedure must modify the real mode CS:IP before returning
  5637.     values are returned to real mode by modifying the real mode call struc
  5638.     DPMI hosts must provide at least 16 callbacks per client
  5639.     the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 does
  5640.       not support this function
  5641. SeeAlso: AX=0304h,AX=0C00h
  5642.  
  5643. (Table 2299)
  5644. Values DPMI real-mode callback procedure is called with:
  5645.     DS:(E)SI = selector:offset of real mode SS:SP
  5646.     ES:(E)DI = selector:offset of real mode call structure
  5647.     SS:(E)SP = locked protected mode API stack
  5648.     interrupts disabled
  5649. Return: (with IRET)
  5650.     ES:(E)DI = selector:offset of real mode call structure to restore
  5651. --------E-310304-----------------------------
  5652. INT 31 P - DPMI 0.9+ - FREE REAL MODE CALLBACK ADDRESS
  5653.     AX = 0304h
  5654.     CX:DX = real mode callback address
  5655. Return: CF clear if successful
  5656.     CF set on error
  5657.         AX = error code (DPMI 1.0+) (8024h) (see #2293)
  5658. Note:    the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 does
  5659.       not support this function
  5660. SeeAlso: AX=0303h
  5661. --------E-310305-----------------------------
  5662. INT 31 P - DPMI 0.9+ - GET STATE SAVE/RESTORE ADDRESSES
  5663.     AX = 0305h
  5664. Return: CF clear
  5665.     AX = size in bytes of state buffer
  5666.     BX:CX = real mode address of procedure to save/restore state
  5667.     SI:(E)DI = protected mode procedure to save/restore state (see #2300)
  5668. Notes:    the buffer size will be zero if it is not necessary to preserve state
  5669.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  5670.     this function is only needed if using the raw mode switch service
  5671. SeeAlso: AX=0306h
  5672.  
  5673. (Table 2300)
  5674. Call DPMI state-save procedures with:
  5675.     AL = direction
  5676.         00h save state
  5677.         01h restore state
  5678.     ES:(E)DI -> state buffer
  5679. Return: all registers preserved
  5680. --------E-310306-----------------------------
  5681. INT 31 P - DPMI 0.9+ - GET RAW MODE SWITCH ADDRESSES
  5682.     AX = 0306h
  5683. Return: CF clear
  5684.     BX:CX -> procedure to switch from real to protected mode (see #2301)
  5685.     SI:(E)DI -> procedure to switch from protected to real mode
  5686. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  5687.     the caller must save and restore the state of the task with AX=0305h
  5688.     not supported by MS Windows 3.0 in Standard mode
  5689. SeeAlso: AX=0305h
  5690.  
  5691. (Table 2301)
  5692. Values to JUMP at mode-switch procedures with:
  5693.     AX = new DS
  5694.     CX = new ES
  5695.     DX = new SS
  5696.     (E)BX = new (E)SP
  5697.     SI:(E)DI = new CS:(E)IP
  5698. Notes:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  5699.       DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h
  5700.     interrupts will stay disabled during the entire mode switch if they
  5701.       are disabled on entry to the mode-switch procedure
  5702. --------E-310400-----------------------------
  5703. INT 31 P - DPMI 0.9+ - GET DPMI VERSION
  5704.     AX = 0400h
  5705. Return: CF clear
  5706.     AH = major version of DPMI spec supported
  5707.     AL = two-digit minor version of DPMI spec supported
  5708.     BX = DPMI host flags (see #2302)
  5709.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  5710.     DH = curr value of virtual master interrupt controller base interrupt
  5711.     DL = curr value of virtual slave interrupt controller base interrupt
  5712. BUG:    Windows NT versions from the March 1993 beta to at least the Final
  5713.       release with fixes to CSD002 report version 0090h (0.144); this has
  5714.       reportedly been corrected in the Windows NT 3.5 beta
  5715. SeeAlso: AX=0401h,INT 21/AX=250Ch,INT 2F/AX=1687h,INT 67/AX=DE0Ah
  5716.  
  5717. Bitfields for DPMI host flags:
  5718. Bit(s)    Description    (Table 2302)
  5719.  0    running under an 80386 (32-bit) implementation
  5720.  1    processor returns to real mode for reflected interrupts instead of V86
  5721.       mode
  5722.  2    virtual memory supported
  5723.  3    reserved (undefined)
  5724.  4-15    reserved (zero)
  5725. --------E-310401-----------------------------
  5726. INT 31 P - DPMI 1.0+ - GET DPMI CAPABILITIES
  5727.     AX = 0401h
  5728.     ES:(E)DI -> 128-byte buffer for host description (see #2303)
  5729. Return: CF clear if successful
  5730.         AX = capabilities (see #2304)
  5731.         CX = reserved (00h)
  5732.         DX = reserved (00h)
  5733.         buffer filled
  5734.     CF set on error (DPMI 0.9 only)
  5735. SeeAlso: AX=0400h
  5736.  
  5737. Format of DPMI host description:
  5738. Offset    Size    Description    (Table 2303)
  5739.  00h    BYTE    host major version number
  5740.  01h    BYTE    host minor version number
  5741.  02h 126 BYTEs    ASCIZ host vendor name
  5742.  
  5743. Bitfields for DPMI capabilities:
  5744. Bit(s)    Description    (Table 2304)
  5745.  0    paged accessed/dirty supported (see AX=0506h,AX=0507h)
  5746.  1    exceptions restartability supported
  5747.  2    device mapping supported (see AX=0508h)
  5748.  3    conventional memory mapping supported (see AX=0509h)
  5749.  4    demand zero-fill supported
  5750.  5    write-protect client capability supported
  5751.  6    write-protect host capability supported
  5752.  7-15    reserved
  5753. --------E-310500-----------------------------
  5754. INT 31 P - DPMI 0.9+ - GET FREE MEMORY INFORMATION
  5755.     AX = 0500h
  5756.     ES:(E)DI -> buffer for memory information (see #2305)
  5757. Return: CF clear
  5758. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  5759.     this function must be considered advisory because other applications
  5760.       may affect the results at any time after the call
  5761.     fields not supported by the DPMI implementation are filled with
  5762.       FFFFFFFFh
  5763.     DPMI 1.0+ supports this function solely for backward compatibility; use
  5764.       AX=050Bh instead
  5765.     the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 only
  5766.       returns the first field in the memory information record
  5767. SeeAlso: AX=0501h,AX=050Bh,AX=0604h
  5768.  
  5769. Format of DPMI memory information:
  5770. Offset    Size    Description    (Table 2305)
  5771.  00h    DWORD    largest available block in bytes
  5772.  04h    DWORD    maximum unlocked page allocation
  5773.  08h    DWORD    maximum locked page allocation
  5774.  0Ch    DWORD    total linear address space in pages
  5775.  10h    DWORD    total unlocked pages
  5776.  14h    DWORD    free pages
  5777.  18h    DWORD    total physical pages
  5778.  1Ch    DWORD    free linear address space in pages
  5779.  20h    DWORD    size of paging file/partition in pages
  5780.  24h 12 BYTEs    reserved
  5781. --------E-310501-----------------------------
  5782. INT 31 P - DPMI 0.9+ - ALLOCATE MEMORY BLOCK
  5783.     AX = 0501h
  5784.     BX:CX = size in bytes
  5785. Return: CF clear if successful
  5786.         BX:CX = linear address of block
  5787.         SI:DI = memory block handle for resizing and freeing block
  5788.     CF set on error
  5789.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see #2293)
  5790. Notes:    no selectors are allocated
  5791.     the memory block is allocated unlocked (can be locked with AX=0600h)
  5792.     allocations are often page granular (see AX=0604h)
  5793.     under MS Windows 3.10 Enhanced mode with paging enabled, it is possible
  5794.       for this function to fail even if AX=0500h indicates that enough
  5795.       memory is available
  5796. SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h
  5797. SeeAlso: INT 2F/AX=FB42h/BX=0002h
  5798. --------E-310502-----------------------------
  5799. INT 31 P - DPMI 0.9+ - FREE MEMORY BLOCK
  5800.     AX = 0502h
  5801.     SI:DI = handle of memory block
  5802. Return: CF clear if successful
  5803.     CF set on error
  5804.         AX = error code (DPMI 1.0+) (8023h) (see #2293)
  5805. Note:    any selectors allocated for the memory block must also be freed,
  5806.       preferably before freeing the memory block
  5807. SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h
  5808. --------E-310503-----------------------------
  5809. INT 31 P - DPMI 0.9+ - RESIZE MEMORY BLOCK
  5810.     AX = 0503h
  5811.     BX:CX = new size in bytes (nonzero)
  5812.     SI:DI = handle of memory block
  5813. Return: CF clear if successful
  5814.         BX:CX = new linear address
  5815.         SI:DI = new handle of memory block
  5816.     CF set on error
  5817.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h)
  5818.         (see #2293)
  5819. Notes:    any selectors pointing at the block must be updated
  5820.     the previous memory block handle becomes invalid
  5821.     an error is returned if the new size is 0
  5822. SeeAlso: AX=0102h,AX=0501h,AX=0505h
  5823. --------E-310504-----------------------------
  5824. INT 31 P - DPMI 1.0+ - ALLOCATE LINEAR MEMORY BLOCK
  5825.     AX = 0504h
  5826.     EBX = page-aligned linear address of memory block (00000000h if any
  5827.           address is acceptable)
  5828.     ECX = size in bytes (nonzero)
  5829.     EDX = flags
  5830.         bit 0: set to create committed pages instead of uncommitted pages
  5831.         bits 1-31 reserved (0)
  5832. Return: CF clear if successful
  5833.         EBX = linear address of memory block
  5834.         ESI = memory block handle
  5835.     CF set on error
  5836.         AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see #2293)
  5837. Note:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5838. SeeAlso: AX=0501h,AX=0505h
  5839. --------E-310505-----------------------------
  5840. INT 31 P - DPMI 1.0+ - RESIZE LINEAR MEMORY BLOCK
  5841.     AX = 0505h
  5842.     ESI = memory block handle
  5843.     ECX = new size in bytes (nonzero)
  5844.     EDX = flags
  5845.         bit 0: create committed pages rather than uncommitted pages
  5846.         bit 1: segment descriptor update required
  5847.         ES:EBX -> buffer containing array of WORDs with selectors
  5848.         EDI = number of selectors in array
  5849.         bits 2-31 reserved (0)
  5850. Return: CF clear if successful
  5851.         EBX = new linear base address
  5852.         ESI = new memory block handle
  5853.     CF set on error
  5854.         AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see #2293)
  5855. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5856.     the old memory block handle becomes invalid
  5857.     if EDX bit 1 set and the block's base address is changed, DPMI updates
  5858.       all descriptors for selectors in the update buffer which fall within
  5859.       the memory block
  5860. SeeAlso: AX=0503h,AX=0504h
  5861. --------E-310506-----------------------------
  5862. INT 31 P - DPMI 1.0+ - GET PAGE ATTRIBUTES
  5863.     AX = 0506h
  5864.     ESI = memory block handle
  5865.     EBX = offset in memory block of first page
  5866.     ECX = number of pages
  5867.     ES:EDX -> array of WORDs to hold page attributes (see #2306)
  5868. Return: CF clear if successful
  5869.         buffer filled
  5870.     CF set on error
  5871.         AX = error code (8001h,8023h,8025h) (see #2293)
  5872. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5873.     if EBX is not page-aligned, it will be rounded down
  5874. SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h
  5875.  
  5876. Bitfields for DPMI page attribute word:
  5877. Bit(s)    Description    (Table 2306)
  5878.  0-2    page type
  5879.     000 uncommitted
  5880.     001 committed
  5881.     010 mapped (see AX=0508h,AX=0509h)
  5882.     other currently unused
  5883.  3    page is read/write rather than read-only
  5884.  4    accessed/dirty bits supplied in bits 5 and 6
  5885.  5    page has been accessed (only valid if bit 4 set)
  5886.  6    page has been written (only valid if bit 4 set)
  5887.  7-15    reserved (0)
  5888. --------E-310507-----------------------------
  5889. INT 31 P - DPMI 1.0+ - MODIFY PAGE ATTRIBUTES
  5890.     AX = 0507h
  5891.     ESI = memory block handle
  5892.     EBX = offset in memory block of first page
  5893.     ECX = number of pages
  5894.     ES:EDX -> array of WORDs with new page attributes (see #2306)
  5895. Return: CF clear if successful
  5896.     CF set on error
  5897.         AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h)
  5898.         (see #2293)
  5899.         ECX = number of pages which have been set
  5900. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5901.     if EBX is not page-aligned, it will be rounded down
  5902. SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh
  5903. --------E-310508-----------------------------
  5904. INT 31 P - DPMI 1.0+ - MAP DEVICE IN MEMORY BLOCK
  5905.     AX = 0508h
  5906.     ESI = memory block handle
  5907.     EBX = page-aligned offset within memory block of page(s) to be mapped
  5908.     ECX = number of pages to map
  5909.     EDX = page-aligned physical address of device
  5910. Return: CF clear if successful
  5911.     CF set on error
  5912.         AX = error code (8001h,8003h,8023h,8025h) (see #2293)
  5913. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5914.     support of this function is optional; hosts are also allowed to support
  5915.       the function for some devices but not others
  5916. SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h
  5917. --------E-310509-----------------------------
  5918. INT 31 P - DPMI 1.0+ - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK
  5919.     AX = 0509h
  5920.     ESI = memory block handle
  5921.     EBX = page-aligned offset within memory block of page(s) to map
  5922.     ECX = number of pages to map
  5923.     EDX = page-aligned linear address of conventional (below 1M) memory
  5924. Return: CF clear if successful
  5925.     CF set on error
  5926.         AX = error code (8001h,8003h,8023h,8025h) (see #2293)
  5927. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5928.     support of this function is optional
  5929. SeeAlso: AX=0504h,AX=0508h,AX=0801h
  5930. --------E-31050A-----------------------------
  5931. INT 31 P - DPMI 1.0+ - GET MEMORY BLOCK SIZE AND BASE
  5932.     AX = 050Ah
  5933.     SI:DI = memory block handle
  5934. Return: CF clear if successful
  5935.         SI:DI = size in bytes
  5936.         BX:CX = base address
  5937.     CF set on error
  5938.         AX = error code (8023h) (see #2293)
  5939. SeeAlso: AX=0501h,AX=0504h
  5940. --------E-31050B-----------------------------
  5941. INT 31 P - DPMI 1.0+ - GET MEMORY INFORMATION
  5942.     AX = 050Bh
  5943.     ES:(E)DI -> 128-byte buffer for memory information (see #2307)
  5944. Return: CF clear if successful
  5945.     CF set on error (DPMI 0.9 only)
  5946. Note:    16-bit programs use ES:DI, 32-bit programs must use ES:EDI
  5947. SeeAlso: AX=0500h
  5948.  
  5949. Format of DPMI memory information:
  5950. Offset    Size    Description    (Table 2307)
  5951.  00h    DWORD    total allocated bytes of physical memory controlled by host
  5952.  04h    DWORD    total allocated bytes of virtual memory controlled by host
  5953.  08h    DWORD    total available bytes of virtual memory controlled by host
  5954.  0Ch    DWORD    total allocated bytes of virtual memory for curr virtual mach
  5955.  10h    DWORD    total available bytes of virtual memory for curr virtual mach
  5956.  14h    DWORD    total allocated bytes of virtual memory for current client
  5957.  18h    DWORD    total available bytes of virtual memory for current client
  5958.  1Ch    DWORD    total locked bytes for current client
  5959.  20h    DWORD    maximum locked bytes for current client
  5960.  24h    DWORD    highest linear address available to current client
  5961.  28h    DWORD    largest available memory block in bytes
  5962.  2Ch    DWORD    minimum allocation unit in bytes
  5963.  30h    DWORD    allocation alignment unit size in bytes
  5964.  34h 76 BYTEs    reserved (00h)
  5965. --------E-310600-----------------------------
  5966. INT 31 P - DPMI 0.9+ - LOCK LINEAR REGION
  5967.     AX = 0600h
  5968.     BX:CX = starting linear address
  5969.     SI:DI = size of region in bytes
  5970. Return: CF clear if successful
  5971.     CF set on error
  5972.         none of the memory is locked
  5973.         AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see #2293)
  5974. Notes:    pages at beginning and end will be locked if the region overlaps them
  5975.     may be called multiple times for a given page; the DPMI host keeps a
  5976.       lock count for each page
  5977. SeeAlso: AX=0004h,AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h
  5978. --------E-310601-----------------------------
  5979. INT 31 P - DPMI 0.9+ - UNLOCK LINEAR REGION
  5980.     AX = 0601h
  5981.     BX:CX = starting linear address
  5982.     SI:DI = size of region in bytes
  5983. Return: CF clear if successful
  5984.     CF set on error
  5985.         none of the memory is unlocked
  5986.         AX = error code (DPMI 1.0+) (8002h,8025h) (see #2293)
  5987. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  5988.     memory whose lock count has not reached zero remains locked
  5989. SeeAlso: AX=0005h,AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h
  5990. --------E-310602-----------------------------
  5991. INT 31 P - DPMI 0.9+ - MARK REAL MODE REGION AS PAGEABLE
  5992.     AX = 0602h
  5993.     BX:CX = starting linear address
  5994.     SI:DI = size of region in bytes
  5995. Return: CF clear if successful
  5996.     CF set on error
  5997.         none of the memory is made pageable
  5998.         AX = error code (DPMI 1.0+) (8002h,8025h) (see #2293)
  5999. Notes:    must relock all unlocked real mode memory before terminating process
  6000.       for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory
  6001.     pages at beginning and end will be unlocked if the region overlaps them
  6002.     pageability of real mode pages is binary, not a count
  6003. SeeAlso: AX=0600h,AX=0603h
  6004. --------E-310603-----------------------------
  6005. INT 31 P - DPMI 0.9+ - RELOCK REAL MODE REGION
  6006.     AX = 0603h
  6007.     BX:CX = starting linear address
  6008.     SI:DI = size of region in bytes
  6009. Return: CF clear if successful
  6010.     CF set on error
  6011.         none of the memory is relocked
  6012.         AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see #2293)
  6013. Notes:    pages at beginning and end will be relocked if the region overlaps them
  6014.     pageability of real mode pages is binary, not a count
  6015. SeeAlso: AX=0602h
  6016. --------E-310604-----------------------------
  6017. INT 31 P - DPMI 0.9+ - GET PAGE SIZE
  6018.     AX = 0604h
  6019. Return: CF clear if successful
  6020.         BX:CX = page size in bytes
  6021.     CF set on error
  6022.         AX = error code (DPMI 1.0+) (see also #2293)
  6023.         8001h unsupported, 16-bit host
  6024. BUG:    the Borland C++ 3.1 DPMILOAD returns with CF clear but BX and CX
  6025.       unchanged
  6026. --------E-310700-----------------------------
  6027. INT 31 Pu - DPMI 0.9+ - MARK PAGES AS PAGING CANDIDATES
  6028.     AX = 0700h
  6029.     BX:CX = starting linear page number
  6030.     SI:DI = number of pages to mark as paging candidates
  6031. Return: ???
  6032. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  6033.       specification, this function is called by MS Windows TASKMAN,
  6034.       PROGMAN, and KERNEL
  6035. SeeAlso: AX=0701h,AX=0702h
  6036. --------E-310701-----------------------------
  6037. INT 31 Pu - DPMI 0.9+ - DISCARD PAGES
  6038.     AX = 0701h
  6039.     BX:CX = starting linear page number
  6040.     SI:DI = number of pages to discard
  6041. Return: ???
  6042. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  6043.       specification, this function is called by MS Windows TASKMAN,
  6044.       PROGMAN, and KERNEL
  6045. SeeAlso: AX=0700h,AX=0703h
  6046. --------E-310702-----------------------------
  6047. INT 31 P - DPMI 0.9+ - MARK PAGE AS DEMAND PAGING CANDIDATE
  6048.     AX = 0702h
  6049.     BX:CX = starting linear address
  6050.     SI:DI = number of bytes to mark as paging candidates
  6051. Return: CF clear if successful
  6052.     CF set on error
  6053.         AX = error code (DPMI 1.0+) (8025h) (see #2293)
  6054. Notes:    this function is advisory, and does not force immediate paging
  6055.     partial pages will not be discarded
  6056. SeeAlso: AX=0700h,AX=0703h
  6057. --------E-310703-----------------------------
  6058. INT 31 P - DPMI 0.9+ - DISCARD PAGE CONTENTS
  6059.     AX = 0703h
  6060.     BX:CX = starting linear address
  6061.     SI:DI = number of bytes to mark as discarded
  6062. Return: CF clear if successful
  6063.     CF set on error
  6064.         AX = error code (DPMI 1.0+) (8025h) (see #2293)
  6065. Notes:    this function is advisory, and may be ignored by DPMI implementations
  6066.     partial pages will not be discarded
  6067. SeeAlso: AX=0701h,AX=0702h
  6068. --------E-310800-----------------------------
  6069. INT 31 P - DPMI 0.9+ - PHYSICAL ADDRESS MAPPING
  6070.     AX = 0800h
  6071.     BX:CX = physical address (should be above 1 MB)
  6072.     SI:DI = size in bytes
  6073. Return: CF clear if successful
  6074.         BX:CX = linear address which maps the requested physical memory
  6075.     CF set on error
  6076.         AX = error code (DPMI 1.0+) (8003h,8021h) (see #2293)
  6077. Notes:    implementations may refuse this call because it can circumvent protects
  6078.     the caller must build an appropriate selector for the memory
  6079.     do not use for memory mapped in the first megabyte
  6080. SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h
  6081. --------E-310801-----------------------------
  6082. INT 31 P - DPMI 1.0+ - FREE PHYSICAL ADDRESS MAPPING
  6083.     AX = 0801h
  6084.     BX:CX = linear address returned by AX=0800h
  6085. Return: CF clear if successful
  6086.     CF set on error
  6087.         AX = error code (8025h) (see #2293)
  6088. Note:    should be called at end of access to device mapped with AX=0800h
  6089. SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h
  6090. --------E-310900-----------------------------
  6091. INT 31 P - DPMI 0.9+ - GET AND DISABLE VIRTUAL INTERRUPT STATE
  6092.     AX = 0900h
  6093. Return: CF clear
  6094.     virtual interrupts disabled
  6095.     AL = previous interrupt state (00h disabled, 01h enabled)
  6096.     AH preserved
  6097. Notes:    the previous state may be restored simply by executing another INT 31
  6098.     a CLI instruction may be used if the previous state is unimportant,
  6099.       but should be assumed to be very slow due to trapping by the host
  6100. SeeAlso: AX=0901h,AX=0902h
  6101. --------E-310901-----------------------------
  6102. INT 31 P - DPMI 0.9+ - GET AND ENABLE VIRTUAL INTERRUPT STATE
  6103.     AX = 0901h
  6104. Return: CF clear
  6105.     virtual interrupts enabled
  6106.     AL = previous interrupt state (00h disabled, 01h enabled)
  6107.     AH preserved
  6108. Notes:    the previous state may be restored simply by executing another INT 31
  6109.     a STI instruction may be used if the previous state is unimportant,
  6110.       but should be assumed to be very slow due to trapping by the host
  6111. SeeAlso: AX=0900h,AX=0902h
  6112. --------E-310902-----------------------------
  6113. INT 31 P - DPMI 0.9+ - GET VIRTUAL INTERRUPT STATE
  6114.     AX = 0902h
  6115. Return: CF clear
  6116.     AL = current interrupt state (00h disabled, 01h enabled)
  6117. Note:    should be used rather than PUSHF because that instruction yields the
  6118.       physical interrupt state rather than the per-client virtualized
  6119.       interrupt flag
  6120. SeeAlso: AX=0900h,AX=0901h
  6121. --------E-310A00-----------------------------
  6122. INT 31 P - DPMI 0.9+ - GET VENDOR SPECIFIC API ENTRY POINT
  6123.     AX = 0A00h
  6124.     DS:(E)SI -> case-sensitive ASCIZ vendor name or identifier
  6125. Return: CF clear if successful
  6126.         ES:(E)DI -> FAR extended API entry point
  6127.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  6128.     CF set on error
  6129.         AX = error code (DPMI 1.0+) (8001h) (see #2293)
  6130. Notes:    extended API parameters are vendor-specific
  6131.     DPMI 1.0+ supports this function solely for backward compatibility; use
  6132.       INT 2F/AX=168Ah instead
  6133.     this function is not supported by MS Windows 3.10, BC++ 3.1 DPMILOAD,
  6134.       or QDPMI v1.0x; use INT 2F/AX=168Ah instead.    It is supported by
  6135.       386MAX v7.01.
  6136. SeeAlso: INT 2F/AX=168Ah
  6137. --------E-310B00-----------------------------
  6138. INT 31 P - DPMI 0.9+ - SET DEBUG WATCHPOINT
  6139.     AX = 0B00h
  6140.     BX:CX = linear address
  6141.     DL = size (1,2,4 bytes)
  6142.     DH = type (00h execute, 01h write, 02h read/write)
  6143. Return: CF clear if successful
  6144.         BX = watchpoint handle
  6145.     CF set on error
  6146.         AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see #2293)
  6147. SeeAlso: AX=0212h,AX=0601h
  6148. --------E-310B01-----------------------------
  6149. INT 31 P - DPMI 0.9+ - CLEAR DEBUG WATCHPOINT
  6150.     AX = 0B01h
  6151.     BX = watchpoint handle
  6152. Return: CF clear if successful
  6153.     CF set on error
  6154.         AX = error code (DPMI 1.0+) (8023h) (see #2293)
  6155. Note:    the watchpoint handle is freed
  6156. SeeAlso: AX=0B00h
  6157. --------E-310B02-----------------------------
  6158. INT 31 P - DPMI 0.9+ - GET STATE OF DEBUG WATCHPOINT
  6159.     AX = 0B02h
  6160.     BX = watchpoint handle
  6161. Return: CF clear if successful
  6162.         AX = status flags
  6163.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  6164.     CF set on error
  6165.         AX = error code (DPMI 1.0+) (8023h) (see #2293)
  6166. SeeAlso: AX=0B00h,AX=0B03h
  6167. --------E-310B03-----------------------------
  6168. INT 31 P - DPMI 0.9+ - RESET DEBUG WATCHPOINT
  6169.     AX = 0B03h
  6170.     BX = watchpoint handle
  6171. Return: CF clear if successful
  6172.     CF set on error
  6173.         AX = error code (DPMI 1.0+) (8023h) (see #2293)
  6174. SeeAlso: AX=0B02h
  6175. --------E-310C00-----------------------------
  6176. INT 31 P - DPMI 1.0+ - INSTALL RESIDENT HANDLER INIT CALLBACK
  6177.     AX = 0C00h
  6178.     ES:(E)DI -> resident service provider structure (see #2308)
  6179. Return: CF clear if successful
  6180.     CF set on error
  6181.         AX = error code (8015h,8021h,8025h) (see #2293 at AX=0000h)
  6182. Note:    calling this function declares an intent to provide resident
  6183.       protected mode services after terminating with AX=0C01h
  6184. SeeAlso: AX=0303h,AX=0C01h
  6185.  
  6186. Format of DPMI resident service provider structure:
  6187. Offset    Size    Description    (Table 2308)
  6188.  00h    QWORD    descriptor for 16-bit data segment
  6189.  08h    QWORD    descriptor for 16-bit code segment (zeros if not supported)
  6190.  10h    WORD    offset of 16-bit callback procedure
  6191.  12h  2 BYTEs    reserved
  6192.  14h    QWORD    descriptor for 32-bit data segment
  6193.  1Ch    QWORD    descriptor for 32-bit code segment (zeros if not supported)
  6194.  24h    DWORD    offset of 32-bit callback procedure
  6195. --------E-310C01-----------------------------
  6196. INT 31 P - DPMI 1.0+ - TERMINATE AND STAY RESIDENT
  6197.     AX = 0C01h
  6198.     BL = return code
  6199.     DX = number of paragraphs of DOS memory to reserve (0 or >= 6)
  6200. Return: never
  6201. Notes:    should only be used if the program will only provide services to
  6202.       other DPMI programs
  6203.     any protected mode memory remains allocated to the program unless
  6204.       explicitly freed before this call
  6205.     must first call AX=0C00h or program will simply be terminated
  6206. SeeAlso: AX=0C00h,INT 21/AH=31h
  6207. --------E-310D00-----------------------------
  6208. INT 31 P - DPMI 1.0+ - ALLOCATE SHARED MEMORY
  6209.     AX = 0D00h
  6210.     ES:(E)DI -> shared memory allocation request structure (see #2309)
  6211. Return: CF clear if successful
  6212.         request structure updated
  6213.     CF set on error
  6214.         AX = error code (8012h,8013h,8014h,8016h,8021h) (see #2293)
  6215. Note:    first 16 bytes of memory block will be initialized to zeros on the
  6216.       first allocation
  6217. SeeAlso: AX=0501h,AX=0D01h,AX=0D02h
  6218.  
  6219. Format of DPMI shared memory allocation request structure:
  6220. Offset    Size    Description    (Table 2309)
  6221.  00h    DWORD    requested length of shared memory block in bytes
  6222.  04h    DWORD    (ret) allocated length of block
  6223.  08h    DWORD    (ret) shared memory handle
  6224.  0Ch    DWORD    (ret) linear address of memory block
  6225.  10h    PWORD    selector:offset32 of ASCIZ name for memory block
  6226.         (name max 128 bytes)
  6227.  16h  2 BYTEs    reserved
  6228.  18h  4 BYTEs    reserved (00h)
  6229. --------E-310D01-----------------------------
  6230. INT 31 P - DPMI 1.0+ - FREE SHARED MEMORY
  6231.     AX = 0D01h
  6232.     SI:DI = shared memory block handle
  6233. Return: CF clear if successful
  6234.     CF set on error
  6235.         AX = error code (8023h) (see #2293)
  6236. Notes:    handle becomes invalid after this call
  6237.     DPMI maintains separate global and virtual machine use counts for each
  6238.       shared memory block; when the global use counts reaches zero, the
  6239.       block is finally destroyed
  6240. SeeAlso: AX=0502h,AX=0D00h
  6241. --------E-310D02-----------------------------
  6242. INT 31 P - DPMI 1.0+ - SERIALIZE SHARED MEMORY
  6243.     AX = 0D02h
  6244.     SI:DI = shared memory block handle
  6245.     DX = flags
  6246.         bit 0: return immediately rather than suspending if serialization
  6247.           unavailable
  6248.         bit 1: shared rather than exclusive serialization
  6249.         bits 2-15 reserved (0)
  6250. Return: CF clear if successful
  6251.     CF set on error
  6252.         AX = error code (8004h,8005h,8017h-8019h,8023h) (see #2293)
  6253. Notes:    an exclusive serialization blocks any other serialization attempts for
  6254.       the same block by another virtual machine; a shared serialization
  6255.       blocks attempts at exclusive serialization by another virtual machine
  6256.     hosts are not required to detect deadlock
  6257.     a client's interrupt handler can cancel a serialization call which
  6258.       caused it to block by calling AX=0D03h
  6259. SeeAlso: AX=0D00h,AX=0D03h
  6260. --------E-310D03-----------------------------
  6261. INT 31 P - DPMI 1.0+ - FREE SERIALIZATION ON SHARED MEMORY
  6262.     AX = 0D03h
  6263.     SI:DI = shared memory block handle
  6264.     DX = flags
  6265.         bit 0: release shared serialization rather than exclusive serialztn
  6266.         bit 1: free pending serialization
  6267.         bits 2-15 reserved (0)
  6268. Return: CF clear if successful
  6269.     CF set on error
  6270.         AX = error code (8002h,8023h) (see #2293 at AX=0000h)
  6271. SeeAlso: AX=0D00h,AX=0D02h
  6272. --------E-310E00-----------------------------
  6273. INT 31 P - DPMI 1.0+ - GET COPROCESSOR STATUS
  6274.     AX = 0E00h
  6275. Return: CF clear
  6276.     AX = coprocessor status (see #2310)
  6277. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  6278. SeeAlso: AX=0E01h
  6279.  
  6280. Bitfields for DPMI coprocessor status:
  6281. Bit(s)    Description    (Table 2310)
  6282.  0    numeric coprocessor enabled for current client
  6283.  1    client is emulating coprocessor
  6284.  2    numeric coprocessor is present
  6285.  3    host is emulating coprocessor instructions
  6286.  4-7    coprocessor type
  6287.     0000 none
  6288.     0010 80287
  6289.     0011 80387
  6290.     0100 80486 with numeric coprocessor
  6291.     other reserved
  6292.  8-15    not used
  6293. --------E-310E01-----------------------------
  6294. INT 31 P - DPMI 1.0+ - SET EMULATION
  6295.     AX = 0E01h
  6296.     BX = coprocessor flag bits (see #2311)
  6297. Return: CF clear if successful
  6298.     CF set on error
  6299.         AX = error code (8026h) (see #2293 at AX=0000h)
  6300. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  6301. SeeAlso: AX=0E00h
  6302.  
  6303. Bitfields for DPMI coprocessor flags:
  6304. Bit(s)    Description    (Table 2311)
  6305.  0    enable numeric coprocessor for current client
  6306.  1    client will emulate coprocessor
  6307.  2-15    not used
  6308. --------E-3157-------------------------------
  6309. INT 31 - Netroom3 DPMI.EXE v3.00 - ???
  6310.     AH = 57h
  6311.     AL = subfunction (at least 02h,03h,04h,05h,07h,08h,09h,0Ah)
  6312.     ???
  6313. Return: ???
  6314. SeeAlso: INT 2C/AX=0000h"RM386"
  6315. --------E-315702-----------------------------
  6316. INT 31 - Netroom3 DPMI.EXE v3.00 - SWITCH TO PROTECTED MODE
  6317.     AX = 5702h
  6318.     DX = PSP segment of caller
  6319.     STACK: WORD    ???
  6320.            WORD    flags (bit 0 set if 32-bit program)
  6321. Return: as for DPMI mode-switch entry point (see #1911 at INT 2F/AX=1687h)
  6322. Note:    this function is called by the real-mode DPMI mode-switch entry point
  6323. SeeAlso: INT 2F/AX=1687h
  6324. --------E-31EE00------------------------
  6325. INT 31 - DOS32 v3.0+ - GET DOS32 VERSION AND SELECTOR VALUES
  6326.     AX = EE00h
  6327. Return: AL = minor version (BCD)
  6328.     AH = major version (BCD)
  6329.     DL = system type (1=raw DOS, 2=XMS, 4=VCPI, 8=DPMI)
  6330.     BX = selector of 4GB data segment with zero base address
  6331. Program: DOS32 is a 32 bit DOS extender by Adam Seychell.
  6332. SeeAlso: AX=EE02h
  6333. --------E-31EE02------------------------
  6334. INT 31 - DOS32 v3.0+ - GET DOS32 ADDRESS INFORMATION
  6335.     AX = EE02h
  6336. Return: EBX = 32bit linear address of the program segment
  6337.     EDX = Total size in bytes of the programs .EXE file after linking.
  6338.     ESI = offset address of PSP
  6339.     EDI = offset address of program environment
  6340.     ECX = offset address of the program's .EXE ASCIZ file name and path
  6341. SeeAlso: AX=EE00h,AX=EE20h
  6342. --------E-31EE20------------------------
  6343. INT 31 - DOS32 v3.0+ - GET REAL MODE CALL BACK ADDRESS WITH RETF STACK FRAME
  6344.     AX = EE20h
  6345.     ESI = offset of the real mode call back function
  6346. Return: CF clear if successful
  6347.         CX:DX = real mode address to call up to the protected mode
  6348.           procedure
  6349.     CF set on error
  6350. SeeAlso: AX=EE02h,AX=EE21h
  6351. --------E-31EE21------------------------
  6352. INT 31 - DOS32 v3.0+ - GET REAL MODE CALL BACK ADDRESS WITH IRET STACK FRAME
  6353.     AX = EE21h
  6354.     ESI = offset of the real mode call back function
  6355. Return: CF clear if successful
  6356.         CX:DX = real mode address to call up to the protected mode
  6357.           procedure
  6358.     CF set on error
  6359. SeeAlso: AX=EE20h
  6360. --------E-31EE30------------------------
  6361. INT 31 - DOS32 v3.0+ - TERMINATE AND STAY RESIDENT
  6362.     AX = EE30h
  6363. SeeAlso: AX=EE21h,AX=EE40h,INT 21/AH=31h
  6364. --------E-31EE40------------------------
  6365. INT 31 - DOS32 v3.0+ - UNDO PREVIOUS MEMORY ALLOCATION or DMA BUFFER
  6366.     AX = EE40h
  6367. Return: CF clear if successful
  6368.     CF set on error
  6369. SeeAlso: AX=EE41h,AX=EE42h
  6370. --------E-31EE41------------------------
  6371. INT 31 - DOS32 v3.0+ - ALLOCATE 16KB DMA BLOCK
  6372.     AX = EE41h
  6373. Return: CF clear if successful
  6374.         EBX -> 16KB DMA block (Physical address)
  6375.         EDX -> ???
  6376.     CF set on error
  6377. SeeAlso: AX=EE42h
  6378. --------E-31EE42------------------------
  6379. INT 31 - DOS32 v3.0+ - ALLOCATE MEMORY BLOCK
  6380.     AX = EE42h
  6381.     EDX = size in bytes
  6382. Return: CF clear if successful
  6383.         EAX = size in bytes
  6384.         EDX -> memory block
  6385.     CF set on error
  6386. Note:    Size is rounded off to the next 4kb boundary
  6387. SeeAlso: AX=EE41h
  6388. --------E-31FF00-----------------------------
  6389. INT 31 P - CauseWay - "Info" - GET SYSTEM SELECTORS/FLAGS
  6390.     AX = FF00h
  6391. Return: AX = selector for flag address space (base 00000000h, limit 4GB)
  6392.     BX = selector for current PSP segment (limit 0100h)
  6393.     (E)CX = size of DOS transfer buffer (max 64K)
  6394.     DX = real-mode segment address of DOS transfer buffer
  6395.     ES:(E)SI = protected-mode address of DOS transfer buffer
  6396.     EDI = system flags (see #2312)
  6397. Program: CauseWay is a 386 DOS extender by Michael Devore and John Wildsmith
  6398.       for use with Watcom C++ or assembly language programs
  6399. Notes:    the entire transfer buffer can be addressed with a 16-bit offset in
  6400.       protected mode
  6401.     CauseWay always maps selector 0040h to the BIOS data segment at
  6402.       real-mode segment 0040h; when not running under a DPMI host, CauseWay
  6403.       also provides selectors A000h, B000h, and B800h mapped to video
  6404.       memory
  6405. SeeAlso: AX=FF25h
  6406.  
  6407. Bitfields for CauseWay system flags:
  6408. Bit(s)    Description    (Table 2312)
  6409.  0    32-bit code
  6410.  1    virtual memory manage enabled
  6411.  3-2    mode: 00 raw extended memory, 01 VCPI, 10 DPMI
  6412.  4    DPMI available
  6413.  5    VCPI available
  6414.  6    no memory managers
  6415.  7    application descriptor table type: 0 = GDT, 1 = LDT
  6416.  14-8    reserved
  6417.  15    debugging engine present
  6418. --------E-31FF01-----------------------------
  6419. INT 31 P - CauseWay - "IntXX" - SIMULATE REAL-MODE INTERRUPT
  6420.     AX = FF01h
  6421.     BL = interrupt number
  6422.     ES:(E)DI -> real-mode register list (see #2298 at AX=0300h)
  6423. Return: register list updated
  6424. Note:    CauseWay fills in the values for SS, SP, and FLAGS itself, and ignores
  6425.       the values specified for CS and IP
  6426. SeeAlso: AX=0300h,AX=FF02h
  6427. --------E-31FF02-----------------------------
  6428. INT 31 P - CauseWay - "FarCallReal" - SIMULATE REAL-MODE FAR CALL
  6429.     AX = FF02h
  6430.     ES:(E)DI -> real-mode register list (see #2298 at AX=0300h)
  6431. Return: register list updated
  6432. SeeAlso: AX=0301h,AX=FF01h
  6433. --------E-31FF03-----------------------------
  6434. INT 31 P - CauseWay - "GetSel" - ALLOCATE NEW SELECTOR
  6435.     AX = FF03h
  6436. Return: CF clear if successful
  6437.         BX = new selector
  6438.     CF set on error
  6439. Note:    the new selector is initialized with a base address of 000000h, a limit
  6440.       of 0000h, and attributes read/write expand-up data
  6441. SeeAlso: AX=FF04h,AX=FF05h,AX=FF06h
  6442. --------E-31FF04-----------------------------
  6443. INT 31 P - CauseWay - "RelSel" - RELEASE A SELECTOR
  6444.     AX = FF04h
  6445.     BX = selector
  6446. Return: CF clear if successful
  6447.     CF set on error
  6448. SeeAlso: AX=FF03h,AX=FF06h
  6449. --------E-31FF05-----------------------------
  6450. INT 31 P - CauseWay - "CodeSel" - CONVERT SELECTOR TO EXECUTABLE CODE SELECTOR
  6451.     AX = FF05h
  6452.     BX = selector
  6453.     CL = default operation size (00h = 16-bit, 01h = 32-bit)
  6454. Return: CF clear if successful
  6455.     CF set on error
  6456. SeeAlso: AX=FF03h
  6457. --------E-31FF06-----------------------------
  6458. INT 31 P - CauseWay - "AliasSel" - CREATE READ/WRITE DATA ALIAS SELECTOR
  6459.     AX = FF06h
  6460.     BX = original selector
  6461. Return: CF clear if successful
  6462.         AX = new data selector aliasing original selector
  6463.     CF set on error
  6464. SeeAlso: AX=FF03h,AX=FF04h
  6465. --------E-31FF07-----------------------------
  6466. INT 31 P - CauseWay - "GetSelDet" - GET SELECTOR BASE AND LIMIT
  6467.     AX = FF07h
  6468.     BX = selector
  6469. Return: CF clear if successful
  6470.         CX:DX = base address
  6471.         SI:DI = limit (bytes)
  6472.     CF set on error
  6473. SeeAlso: AX=FF08h,AX=FF09h
  6474. --------E-31FF08-----------------------------
  6475. INT 31 P - CauseWay - "GetSelDet32" - GET SELECTOR BASE AND LIMIT (32-bit)
  6476.     AX = FF08h
  6477. Return: CF clear if successful
  6478.         EDX = base address
  6479.         ECX = limit (bytes)
  6480.     CF set on error
  6481. SeeAlso: AX=FF07h,AX=FF0Ah
  6482. --------E-31FF09-----------------------------
  6483. INT 31 P - CauseWay - "SetSelDet" - SET SELECTOR BASE AND LIMIT
  6484.     AX = FF09h
  6485.     BX = selector
  6486.     CX:DX = new base address
  6487.     SI:DI = new byte-granular limit
  6488. Return: CF clear if successful
  6489.     CF set on error
  6490. SeeAlso: AX=FF07h,AX=FF0Ah
  6491. --------E-31FF0A-----------------------------
  6492. INT 31 P - CauseWay - "SetSelDet32" - SET SELECTOR BASE AND LIMIT (32-bit)
  6493.     AX = FF0Ah
  6494.     BX = selector
  6495.     EDX = new base address
  6496.     ECX = new byte-granular limit
  6497. Return: CF clear if successful
  6498.     CF set on error
  6499. SeeAlso: AX=FF08h,AX=FF09h
  6500. --------E-31FF0B-----------------------------
  6501. INT 31 P - CauseWay - "GetMem" - ALLOCATE BLOCK OF MEMORY
  6502.     AX = FF0Bh
  6503.     CX:DX = size in bytes (FFFFh:FFFFh to get size of largest available)
  6504. Return: CF clear if successful
  6505.         BX = selector for accessing block if requested size not FFFFh:FFFFh
  6506.         CX:DX = size of largest available block if requested FFFFh:FFFFh
  6507.     CF set on error
  6508. SeeAlso: AX=FF0Ch,AX=FF0Dh,AX=FF0Fh,AX=FF10h,AX=FF2Ch
  6509. --------E-31FF0C-----------------------------
  6510. INT 31 P - CauseWay - "GetMem32" - ALLOCATE BLOCK OF MEMORY (32-bit)
  6511.     AX = FF0Ch
  6512.     ECX = size in bytes (FFFFFFFFh to get size of largest available block)
  6513. Return: CF clear if successful
  6514.         BX = selector for accessing block if requested size not FFFFh:FFFFh
  6515.         ECX = size of largest available block if requested FFFFh:FFFFh
  6516.     CF set on error
  6517. SeeAlso: AX=FF0Bh,AX=FF0Eh,AX=FF0Fh,AX=FF11h
  6518. --------E-31FF0D-----------------------------
  6519. INT 31 P - CauseWay - "ResMem" - RESIZE MEMORY BLOCK
  6520.     AX = FF0Dh
  6521.     BX = selector for block to be resized
  6522.     CX:DX = new size in bytes
  6523. Return: CF clear if successful
  6524.     CF set on error
  6525. Note:    the memory block may have to be copied to another location in order
  6526.       to satisfy the requested new size, in which case the base address
  6527.       of the selector is updated
  6528. SeeAlso: AX=FF0Bh,AX=FF0Eh,AX=FF12h
  6529. --------E-31FF0E-----------------------------
  6530. INT 31 P - CauseWay - "ResMem32" - RESIZE MEMORY BLOCK (32-bit)
  6531.     AX = FF0Eh
  6532.     BX = selector for block to be resized
  6533.     ECX = new size in bytes
  6534. Return: CF clear if successful
  6535.     CF set on error
  6536. Note:    the memory block may have to be copied to another location in order
  6537.       to satisfy the requested new size, in which case the base address
  6538.       of the selector is updated
  6539. SeeAlso: AX=FF0Ch,AX=FF0Dh,AX=FF13h
  6540. --------E-31FF0F-----------------------------
  6541. INT 31 P - CauseWay - "RelMem" - RELEASE PREVIOUSLY ALLOCATED MEMORY
  6542.     AX = FF0Fh
  6543.     BX = selector for block to be released
  6544. Return: CF clear if successful
  6545.     CF set on error
  6546. SeeAlso: AX=FF0Bh,AX=FF0Ch,AX=FF14h
  6547. --------E-31FF10-----------------------------
  6548. INT 31 P - CauseWay - "GetMemLinear" - ALLOCATE MEMORY WITHOUT SELECTOR
  6549.     AX = FF10h
  6550.     CX:DX = size of block in bytes
  6551. Return: CF clear if successful
  6552.         SI:DI = linear address of allocated block
  6553.     CF set on error
  6554. Note:    this function may return addresses above 16M
  6555. SeeAlso: AX=FF0Bh,AX=FF11h,AX=FF12h,AX=FF14h
  6556. --------E-31FF11-----------------------------
  6557. INT 31 P - CauseWay - "GetMemLinear32" - ALLOCATE MEMORY WITHOUT SELECTOR
  6558.     AX = FF11h
  6559.     ECX = size of block in bytes
  6560. Return: CF clear if successful
  6561.         ESI = linear address of allocated block
  6562.     CF set on error
  6563. Note:    this function may return addresses above 16M
  6564. SeeAlso: AX=FF0Ch,AX=FF10h,AX=FF13h,AX=FF14h
  6565. --------E-31FF12-----------------------------
  6566. INT 31 P - CauseWay - "ResMemLinear" - RESIZE LINEAR MEMORY BLOCK
  6567.     AX = FF12h
  6568.     CX:DX = new size in bytes
  6569.     SI:DI = linear address of block to be resized
  6570. Return: CF clear if successful
  6571.        SI:DI = new linear address of block
  6572.     CF set on error
  6573. SeeAlso: AX=FF0Dh,AX=FF10h,AX=FF13h
  6574. --------E-31FF13-----------------------------
  6575. INT 31 P - CauseWay - "ResMemLinear32" - RESIZE LINEAR MEMORY BLOCK (32-bit)
  6576.     AX = FF13h
  6577.     ECX = new size in bytes
  6578.     ESI = linear address of block to be resized
  6579. Return: CF clear if successful
  6580.        ESI = new linear address of block
  6581.     CF set on error
  6582. SeeAlso: AX=FF0Eh,AX=FF11h,AX=FF12h
  6583. --------E-31FF14-----------------------------
  6584. INT 31 P - CauseWay - "RelMemLinear" - RELEASE LINEAR MEMORY BLOCK
  6585.     AX = FF14h
  6586.     SI:DI = linear address of block to be released
  6587. Return: CF clear if successful
  6588.     CF set on error
  6589. SeeAlso: AX=FF0Fh,AX=FF10h,AX=FF15h
  6590. --------E-31FF15-----------------------------
  6591. INT 31 P - CauseWay - "RelMemLinear32" - RELEASE LINEAR MEMORY BLOCK (32-bit)
  6592.     AX = FF15h
  6593.     ESI = linear address of block to be released
  6594. Return: CF clear if successful
  6595.     CF set on error
  6596. SeeAlso: AX=FF0Fh,AX=FF11h,AX=FF15h
  6597. --------E-31FF16-----------------------------
  6598. INT 31 P - CauseWay - "GetMemNear" - ALLOCATE APPLICATION-RELATIVE MEMORY
  6599.     AX = FF16h
  6600.     EBX = size in bytes of block to allocate
  6601. Return: CF clear if successful
  6602.        ESI = application-relative linear address of allocated block
  6603.     CF set on error
  6604. SeeAlso: AX=FF17h,AX=FF18h,AX=FF19h
  6605. --------E-31FF17-----------------------------
  6606. INT 31 P - CauseWay - "ResMemNear" - RESIZE APPLICATION-RELATIVE MEMORY BLOCK
  6607.     AX = FF17h
  6608.     EBX = size in bytes of block to allocate
  6609.     ESI = application-relative linear address of block
  6610. Return: CF clear if successful
  6611.         ESI = new application-relative linear address of block
  6612.     CF set on error
  6613. SeeAlso: AX=FF16h,AX=FF18h,AX=FF19h
  6614. --------E-31FF18-----------------------------
  6615. INT 31 P - CauseWay - "RelMemNear" - RELEASE APPLICATION-RELATIVE MEMORY BLOCK
  6616.     AX = FF18h
  6617.     ESI = application-relative linear address of block
  6618. Return: CF clear if successful
  6619.     CF set on error
  6620. SeeAlso: AX=FF16h,AX=FF17h,AX=FF19h
  6621. --------E-31FF19-----------------------------
  6622. INT 31 P - CauseWay - "Linear2Near" - CONVERT LINEAR TO APP-RELATIVE ADDRESS
  6623.     AX = FF19h
  6624.     ESI = linear address
  6625. Return: ESI = application-relative linear address
  6626. SeeAlso: AX=FF1Ah
  6627. --------E-31FF1A-----------------------------
  6628. INT 31 P - CauseWay - "Near2Linear" - CONVERT APP-RELATIVE TO LINEAR ADDRESS
  6629.     AX = FF1Ah
  6630.     ESI = application-relative linear address
  6631. Return: ESI = linear address
  6632. SeeAlso: AX=FF19h
  6633. --------E-31FF1B-----------------------------
  6634. INT 31 P - CauseWay - "LockMem" - LOCK REGION OF MEMORY
  6635.     AX = FF1Bh
  6636.     BX:CX = starting linear address
  6637.     SI:DI = size of region in bytes
  6638. Return: CF clear if successful
  6639.     CF set on error
  6640. Desc:    prevent memory from being swapped out by the virtual memory manager
  6641. Note:    locks are applied on 4K page boundaries, so memory above and below
  6642.       the specified region may be locked as well
  6643. SeeAlso: AX=FF1Ch,AX=FF1Dh
  6644. --------E-31FF1C-----------------------------
  6645. INT 31 P - CauseWay - "LockMem32" - LOCK REGION OF MEMORY (32-bit)
  6646.     AX = FF1Ch
  6647.     ESI = starting linear address
  6648.     ECX = size of region in bytes
  6649. Return: CF clear if successful
  6650.     CF set on error
  6651. Desc:    prevent memory from being swapped out by the virtual memory manager
  6652. Note:    locks are applied on 4K page boundaries, so memory above and below
  6653.       the specified region may be locked as well
  6654. SeeAlso: AX=FF1Bh,AX=FF1Eh,AX=FF1Fh
  6655. --------E-31FF1D-----------------------------
  6656. INT 31 P - CauseWay - "UnLockMem" - UNLOCK REGION OF MEMORY
  6657.     AX = FF1Dh
  6658.     BX:CX = starting linear address
  6659.     SI:DI = size of region in bytes
  6660. Return: CF clear if successful
  6661.     CF set on error
  6662. Desc:    allow memory to be swapped out by the virtual memory manager
  6663. Note:    locks are applied on 4K page boundaries, so memory above and below
  6664.       the specified region may be unlocked as well
  6665. SeeAlso: AX=FF1Bh,AX=FF1Eh
  6666. --------E-31FF1E-----------------------------
  6667. INT 31 P - CauseWay - "UnLockMem32" - UNLOCK REGION OF MEMORY (32-bit)
  6668.     AX = FF1Eh
  6669.     ESI = starting linear address
  6670.     ECX = size of region in bytes
  6671. Return: CF clear if successful
  6672.     CF set on error
  6673. Desc:    allow memory to be swapped out by the virtual memory manager
  6674. Note:    locks are applied on 4K page boundaries, so memory above and below
  6675.       the specified region may be unlocked as well
  6676. SeeAlso: AX=FF1Ch,AX=FF1Dh,AX=FF20h
  6677. --------E-31FF1F-----------------------------
  6678. INT 31 P - CauseWay - "LockMemNear" - LOCK APPLICATION-RELATIVE MEMORY REGION
  6679.     AX = FF1Fh
  6680.     ESI = starting application-relative linear address
  6681.     EBX = size of region in bytes
  6682. Return: CF clear if successful
  6683.     CF set on error
  6684. Desc:    prevent memory from being swapped out by the virtual memory manager
  6685. Note:    locks are applied on 4K page boundaries, so memory above and below
  6686.       the specified region may be locked as well
  6687. SeeAlso: AX=FF1Ch,AX=FF20h
  6688. --------E-31FF20-----------------------------
  6689. INT 31 P - CauseWay - "UnLockMemNear" - UNLOCK APP-RELATIVE MEMORY REGION
  6690.     AX = FF20h
  6691.     ESI = starting application-relative linear address
  6692.     ECX = size of region in bytes
  6693. Return: CF clear if successful
  6694.     CF set on error
  6695. Desc:    allow memory to be swapped out by the virtual memory manager
  6696. Note:    locks are applied on 4K page boundaries, so memory above and below
  6697.       the specified region may be unlocked as well
  6698. SeeAlso: AX=FF1Eh,AX=FF1Fh
  6699. --------E-31FF21-----------------------------
  6700. INT 31 P - CauseWay - "GetMemDOS" - ALLOCATE CONVENTIONAL MEMORY
  6701.     AX = FF21h
  6702.     BX = number of paragraphs to allocate
  6703. Return: CF clear if successful
  6704.         AX = real-mode segment of allocated block
  6705.         DX = initial selector for block
  6706.     CF set on error
  6707.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  6708.         BX = size of largest available block
  6709. Note:    if the requested size is greater than 64K, contiguous selectors will
  6710.       be allocated, one for each 64K; for 32-bit applications, the first
  6711.       selector's limit will be set to the size of the entire block, while
  6712.       that selector will have a limit of 64K for 16-bit applications.  All
  6713.       selectors after the first one have a limit of 64K except the final
  6714.       one
  6715. SeeAlso: AX=FF22h,AX=FF23h,INT 21/AH=48h
  6716. --------E-31FF22-----------------------------
  6717. INT 31 P - CauseWay - "ResMemDOS" - RESIZE CONVENTIONAL MEMORY BLOCK
  6718.     AX = FF22h
  6719.     BX = new size in paragraphs
  6720.     DX = initial selector for block
  6721. Return: CF clear if successful
  6722.     CF set on error
  6723.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  6724.         BX = maximum number of paragraphs available
  6725. Note:    this function will also fail if the block is expanded past a 64K
  6726.       boundary and the next selector is already in use
  6727. SeeAlso: AX=FF21h,AX=FF23h,INT 21/AH=49h
  6728. --------E-31FF23-----------------------------
  6729. INT 31 P - CauseWay - "RelMemDOS" - RELEASE CONVENTIONAL MEMORY BLOCK
  6730.     AX = FF23h
  6731.     DX = initial selector for block
  6732. Return: CF clear if successful
  6733.     CF set on error
  6734.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  6735. Note:    all descriptors allocated for the block are freed
  6736. SeeAlso: AX=FF21h,AX=FF22h,INT 21/AH=4Ah
  6737. --------E-31FF24-----------------------------
  6738. INT 31 P - CauseWay - "ExecOverlay" - LOAD AND OPTIONALLY EXECUTE APP CODE
  6739.     AX = FF24h
  6740.     EBX = flags
  6741.         bit 0: don't execute (overlay only)
  6742.         bit 1: don't preserve relocation information
  6743.     ES:EDX -> filename (see also #2313)
  6744.     FS:ESI -> commandline (ESI = 00000000h if no commandline)
  6745.     GS:EDI -> name (CW's /o option)
  6746. Return: CF clear if successful
  6747.         ---EBX bit 0 set---
  6748.         CX:EDX = program entry point (CS:EIP)
  6749.         SI = segment of PSP
  6750.         ---EBX bit 1 set---
  6751.         BX:EAX = initial SS:ESP
  6752.         EDI high word = base segment
  6753.         EDI low word = number of segments
  6754.         EBP = start of segment definitions
  6755.     CF set on error
  6756.         AX = error code
  6757.         0001h DOS file access error
  6758.         0002h not a CuaseWay 3P file
  6759.         0003h not enough memory
  6760. SeeAlso: AX=FF2Ah,INT 21/AH=4Bh
  6761.  
  6762. Format of CauseWay executable:
  6763. Offset    Size    Description    (Table 2313)
  6764.  00h  2 BYTEs    signature "3P"
  6765.  02h    DWORD    size of header data in bytes
  6766.  06h    DWORD    size of EXE image data in bytes
  6767.  0Ah    DWORD    number of bytes of program memory required
  6768.  0Eh    WORD    number of segment definitions (see #2315)
  6769.  10h    DWORD    number of relocation table entries
  6770.  14h    DWORD    offset of program entry point
  6771.  18h    WORD    segment list entry number for entry point's CS
  6772.  1Ah    DWORD    initial ESP
  6773.  1Eh    WORD    segment list entry number for initial SS
  6774.  20h    DWORD    control flags (see #2314)
  6775.  24h    DWORD    automatic stack size in bytes if ESP entry = 00000000h
  6776.  28h    BYTE    length of name (name follows program image)
  6777.  29h 23 BYTEs    reserved
  6778. SeeAlso: #0881,#0896 at INT 21/AH=4Bh
  6779.  
  6780. Bitfields for CauseWay executable control flags:
  6781. Bit(s)    Description    (Table 2314)
  6782.  0    16-bit interrupt stack frame
  6783.  7    descriptor table type (0 = GDT, 1 = LDT)
  6784.  14    16-bit default data size
  6785.  31    compressed EXE image
  6786. Note:    bits 0 and 14 should always be equal
  6787. SeeAlso: #2313
  6788.  
  6789. Format of CauseWay segment definition [array]:
  6790. Offset    Size    Description    (Table 2315)
  6791.  00h    DWORD    start offset within program image
  6792.  04h    DWORD    length and type
  6793.         bits 0-19: length
  6794.         bit 20:       granularity (if set, length is in 4K pages)
  6795.         bits 21-24: type
  6796.             0000 code
  6797.             0001 read/write data
  6798.             0010 stack
  6799.             0011 read-only data
  6800.         bit 25: force segment descriptor's D bit to 0
  6801.         bit 26: force segmetn descriptor's D bit to 1
  6802. SeeAlso: #2313
  6803. --------E-31FF25-----------------------------
  6804. INT 31 P - CauseWay - "GetDOSTrans" - GET DOS TRANSFER BUFFER
  6805.     AX = FF25h
  6806. Return: BX = real-mode segment of transfer buffer
  6807.     ECX = transfer buffer size
  6808.     DX = protected-mode selector for transfer buffer
  6809. Note:    the default buffer size of 8K is sufficient for most applications,
  6810.       but an application performing large amounts of file I/O may benefit
  6811.       from allocating its own, larger buffer
  6812. SeeAlso: AX=FF00h,AX=FF26h
  6813. --------E-31FF26-----------------------------
  6814. INT 31 P - CauseWay - "SetDOSTrans" - SET DOS TRANSFER BUFFER
  6815.     AX = FF26h
  6816.     BX = real-mode segment of new transfer buffer
  6817.     ECX = new transfer buffer size
  6818.     DX = protected-mode selector for new transfer buffer
  6819. Return: nothing
  6820. Note:    the specific buffer must be located in conventional memory; only the
  6821.       first 64K will be used
  6822. SeeAlso: AX=FF25h
  6823. --------E-31FF27-----------------------------
  6824. INT 31 P - CauseWay v1.3 - "GetMCBSize" - GET CURRENT MCB ALLOCATION BLOCK SIZE
  6825.     AX = FF27h
  6826. Return: ECX = current threshold
  6827. Desc:    determine the memory allocation size below which CauseWay will use
  6828.       internal MCB chains rather than allocating full 4K pages via DPMI
  6829. SeeAlso: AX=FF00h,AX=FF28h
  6830. --------E-31FF28-----------------------------
  6831. INT 31 P - CauseWay v1.3 - "SetMCBSize" - SET MCB MEMORY ALLOCATION BLOCK SIZE
  6832.     AX = FF28h
  6833.     ECX = new threshold (0000000h to disable MCB memory allocation system)
  6834. Return: CF clear if successful
  6835.         threshold unchanged (default 16K)
  6836.     CF set on error (threshold > 64K)
  6837. Desc:    specify the memory allocation size below which CauseWay will use
  6838.       internal MCB chains rather than allocating full 4K pages via DPMI
  6839. Note:    the specified threshold will be rounded up to the next higher multiple
  6840.       of 4K
  6841. SeeAlso: AX=FF00h,AX=FF27h
  6842. --------E-31FF29-----------------------------
  6843. INT 31 P - CauseWay v1.3 - "GetSels" - ALLOCATE MULTIPLE SELECTORS
  6844.     AX = FF29h
  6845.     CX = number of selectors to allocate
  6846. Return: BX = base selector
  6847. Desc:    allocate multiple contiguous selectors, initializing each to have a
  6848.       base address and limit of zero
  6849. SeeAlso: AX=FF00h,AX=FF04h
  6850. --------E-31FF2A-----------------------------
  6851. INT 31 P - CauseWay v1.3 - "cwLoad" - LOAD ANOTHER CAUSEWAY PROGRAM AS OVERLAY
  6852.     AX = FF2Ah
  6853.     DS:EDX -> filename
  6854. Return: CF clear if successful
  6855.         CX:EDX = CS:EIP of entry point
  6856.         BX:EAX = initial SS:ESP for program
  6857.         SI = PSP for overlay program
  6858.     CF set on error
  6859.         AX = error code (01h file error, 02h not a 3P file, 03h no memory)
  6860. Note:    the returned PSP can be given to "RelMem" (AX=FF0Fh) to release the
  6861.       overlay's memory and selectors; only selectors and memory allocated
  6862.       during loading will be freed by RelMem unless one switches PSPs with
  6863.       INT 21/AH=50h
  6864. SeeAlso: AX=FF00h,AX=FF24h
  6865. --------E-31FF2B-----------------------------
  6866. INT 31 P - CauseWay v1.3 - "cwcInfo" - VALIDATE AND GET SIZE OF CWC FILE
  6867.     AX = FF2Bh
  6868.     BX = file handle for CWC-compressed file
  6869. Return: CF clear if successful
  6870.         ECX = expanded file size
  6871.     CF set on error (not a CWC-compressed file)
  6872. SeeAlso: AX=FF00h,AX=FFFBh
  6873. --------E-31FF2C-----------------------------
  6874. INT 31 P - CauseWay v1.3 - "GetMemSO" - ALLOCATE MEMORY AND RETURN SEL:OFFSET
  6875.     AX = FF2Ch
  6876.     CX:DX = block size in bytes
  6877. Return: CF clear if successful
  6878.        SI:DI = selector:offset of allocated memory
  6879.     CF set on error
  6880. Note:    unlike "GetMem" (AX=FF0Bh), this function will reuse selectors until a
  6881.       segment is full, rather than allocating a new selector for each
  6882.       memory block
  6883. SeeAlso: AX=FF00h,AX=FF2Dh,AX=FF2Eh
  6884. --------E-31FF2D-----------------------------
  6885. INT 31 P - CauseWay v1.3 - "ResMemSO" - RESIZE SELECTOR:OFFSET MEMORY BLOCK
  6886.     AX = FF2Dh
  6887.     SI:DI = selector:offset for memory block
  6888.     CX:DX = new size of block
  6889. Return: CF clear if successful
  6890.        SI:DI = new selector:offset for memory block
  6891.     CF set on error
  6892. SeeAlso: AX=FF00h,AX=FF2Ch,AX=FF2Eh
  6893. --------E-31FF2E-----------------------------
  6894. INT 31 P - CauseWay v1.3 - "RelMemSO" - RELEASE SELECTOR:OFFSET MEMORY BLOCK
  6895.     AX = FF2Eh
  6896.     SI:DI = selector:offset for memory block
  6897. SeeAlso: AX=FF00h
  6898. --------E-31FFFB-----------------------------
  6899. INT 31 P - Causeway v1.3 - "cwcLoad" - LOAD/EXPAND CWC-COMPRESSED FILE
  6900.     AX = FFFBh
  6901.     BX = source file handle
  6902.     ES:EDI -> memory buffer into which to expand file
  6903. Return: CF clear if successful
  6904.         ECX = expanded data length
  6905.     CF set on error
  6906.         EAX = error code (01h file error, 02h bad data, 03h not CWC file)
  6907. Note:    the provided file may consist of the concatenation of several CWC
  6908.       files; the one beginning at the current file position will be
  6909.       expanded
  6910. SeeAlso: AX=FF2Bh
  6911. --------v-32---------------------------------
  6912. INT 32 - VIRUS - reportedly used by "Tiny" Viruses
  6913. SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 31"VIRUS",INT 44"VIRUS"
  6914. --------v-32---------------------------------
  6915. INT 32 - VIRUS - "Plovdiv 1.3"/"Damage 1.3" - ORIGINAL INT 21h VECTOR
  6916. SeeAlso: INT 31"VIRUS",INT 9E"VIRUS"
  6917. --------M-330000-----------------------------
  6918. INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
  6919.     AX = 0000h
  6920. Return: AX = status
  6921.         0000h hardware/driver not installed
  6922.         FFFFh hardware/driver installed
  6923.     BX = number of buttons
  6924.         0000h other than two
  6925.         0002h two buttons (many drivers)
  6926.         0003h Mouse Systems/Logitech three-button mouse
  6927.         FFFFh two buttons
  6928. Notes:    to use mouse on a Hercules-compatible monographics card in graphics
  6929.       mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1,
  6930.       and then call this function.    Logitech drivers v5.01 and v6.00
  6931.       reportedly do not correctly use Hercules graphics in dual-monitor
  6932.       systems, while version 4.10 does.
  6933.     the Logitech mouse driver contains the signature string "LOGITECH"
  6934.       three bytes past the interrupt handler; many of the Logitech mouse
  6935.       utilities check for this signature.
  6936.     Logitech MouseWare v6.30 reportedly does not support CGA video modes
  6937.       if no CGA is present when it is started and the video board is
  6938.       later switched into CGA emulation
  6939. SeeAlso: AX=0011h,AX=0021h,AX=002Fh,INT 62/AX=007Ah,INT 74
  6940. --------M-330001-----------------------------
  6941. INT 33 - MS MOUSE v1.0+ - SHOW MOUSE CURSOR
  6942.     AX = 0001h
  6943. SeeAlso: AX=0002h,INT 16/AX=FFFEh,INT 62/AX=007Bh,INT 6F/AH=06h"F_TRACK_ON"
  6944. --------M-330002-----------------------------
  6945. INT 33 - MS MOUSE v1.0+ - HIDE MOUSE CURSOR
  6946.     AX = 0002h
  6947. Note:    multiple calls to hide the cursor will require multiple calls to
  6948.       function 01h to unhide it.
  6949. SeeAlso: AX=0001h,AX=0010h,INT 16/AX=FFFFh,INT 62/AX=007Bh
  6950. SeeAlso: INT 6F/AH=08h"F_TRACK_OFF"
  6951. --------M-330003-----------------------------
  6952. INT 33 - MS MOUSE v1.0+ - RETURN POSITION AND BUTTON STATUS
  6953.     AX = 0003h
  6954. Return: BX = button status (see #2316)
  6955.     CX = column
  6956.     DX = row
  6957. Note:    in text modes, all coordinates are specified as multiples of the cell
  6958.       size, typically 8x8 pixels
  6959. SeeAlso: AX=0004h,AX=000Bh,INT 2F/AX=D000h"ZWmous"
  6960.  
  6961. Bitfields for mouse button status:
  6962. Bit(s)    Description    (Table 2316)
  6963.  0    left button pressed if 1
  6964.  1    right button pressed if 1
  6965.  2    middle button pressed if 1 (Mouse Systems/Logitech/Genius)
  6966. --------M-330004-----------------------------
  6967. INT 33 - MS MOUSE v1.0+ - POSITION MOUSE CURSOR
  6968.     AX = 0004h
  6969.     CX = column
  6970.     DX = row
  6971. Note:    the row and column are truncated to the next lower multiple of the cell
  6972.       size (typically 8x8 in text modes); however, some versions of the
  6973.       Microsoft documentation incorrectly state that the coordinates are
  6974.       rounded
  6975. SeeAlso: AX=0003h,INT 62/AX=0081h,INT 6F/AH=10h"F_PUT_SPRITE"
  6976. --------M-330005-----------------------------
  6977. INT 33 - MS MOUSE v1.0+ - RETURN BUTTON PRESS DATA
  6978.     AX = 0005h
  6979.     BX = button number (see #2317)
  6980. Return: AX = button states (see #2316)
  6981.     BX = number of times specified button has been pressed since last call
  6982.     CX = column at time specified button was last pressed
  6983.     DX = row at time specified button was last pressed
  6984. Note:    at least for the Genius mouse driver, the number of button presses
  6985.       returned is limited to 7FFFh
  6986. SeeAlso: AX=0006h,INT 62/AX=007Ch
  6987.  
  6988. (Table 2317)
  6989. Values for mouse button number:
  6990.  0000h    left
  6991.  0001h    right
  6992.  0002h    middle (Mouse Systems/Logitech/Genius mouse)
  6993. --------M-330006-----------------------------
  6994. INT 33 - MS MOUSE v1.0+ - RETURN BUTTON RELEASE DATA
  6995.     AX = 0006h
  6996.     BX = button number (see #2317)
  6997. Return: AX = button states (see #2316)
  6998.     BX = number of times specified button has been released since last call
  6999.     CX = column at time specified button was last released
  7000.     DX = row at time specified button was last released
  7001. Note:    at least for the Genius mouse driver, the number of button releases
  7002.       returned is limited to 7FFFh
  7003. SeeAlso: AX=0005h,INT 62/AX=007Ch
  7004. --------M-330007-----------------------------
  7005. INT 33 - MS MOUSE v1.0+ - DEFINE HORIZONTAL CURSOR RANGE
  7006.     AX = 0007h
  7007.     CX = minimum column
  7008.     DX = maximum column
  7009. Note:    in text modes, the minimum and maximum columns are truncated to the
  7010.       next lower multiple of the cell size, typically 8x8 pixels
  7011. SeeAlso: AX=0008h,AX=0010h,AX=0031h,INT 62/AX=0080h
  7012. SeeAlso: INT 6F/AH=0Ch"F_SET_LIMITS_X"
  7013. --------M-330008-----------------------------
  7014. INT 33 - MS MOUSE v1.0+ - DEFINE VERTICAL CURSOR RANGE
  7015.     AX = 0008h
  7016.     CX = minimum row
  7017.     DX = maximum row
  7018. Note:    in text modes, the minimum and maximum rows are truncated to the
  7019.       next lower multiple of the cell size, typically 8x8 pixels
  7020. SeeAlso: AX=0007h,AX=0010h,AX=0031h,INT 62/AX=0080h
  7021. SeeAlso: INT 6F/AH=0Eh"F_SET_LIMITS_Y"
  7022. --------M-330009-----------------------------
  7023. INT 33 - MS MOUSE v3.0+ - DEFINE GRAPHICS CURSOR
  7024.     AX = 0009h
  7025.     BX = column of cursor hot spot in bitmap (-16 to 16)
  7026.     CX = row of cursor hot spot (-16 to 16)
  7027.     ES:DX -> mask bitmap (see #2318)
  7028. Notes:    in graphics modes, the screen contents around the current mouse cursor
  7029.       position are ANDed with the screen mask and then XORed with the
  7030.       cursor mask
  7031.     the Microsoft mouse driver v7.04 and v8.20 uses only BL and CL, so the
  7032.       hot spot row/column should be limited to -128..127
  7033.     Microsoft KnowledgeBase article Q19850 states that the high bit is
  7034.       right-most, but that statement is contradicted by all other available
  7035.       documentation
  7036. SeeAlso: AX=000Ah,AX=0012h,AX=002Ah,INT 62/AX=007Fh,INT 6F/AH=0Ah"F_DEF_MASKS"
  7037.  
  7038. Format of mouse mask bitmap:
  7039. Offset    Size    Description    (Table 2318)
  7040.  00h 16 WORDs    screen mask
  7041.  10h 16 WORDs    cursor mask
  7042. Note:    each word defines the sixteen pixels of a row, low bit rightmost
  7043. --------M-33000A-----------------------------
  7044. INT 33 - MS MOUSE v3.0+ - DEFINE TEXT CURSOR
  7045.     AX = 000Ah
  7046.     BX = hardware/software text cursor
  7047.         0000h software
  7048.         CX = screen mask
  7049.         DX = cursor mask
  7050.         0001h hardware
  7051.         CX = start scan line
  7052.         DX = end scan line
  7053. Note:    when the software cursor is selected, the character/attribute data at
  7054.       the current screen position is ANDed with the screen mask and then
  7055.       XORed with the cursor mask
  7056. SeeAlso: AX=0009h,INT 62/AX=007Eh
  7057. --------M-33000B-----------------------------
  7058. INT 33 - MS MOUSE v1.0+ - READ MOTION COUNTERS
  7059.     AX = 000Bh
  7060. Return: CX = number of mickeys mouse moved horizontally since last call
  7061.     DX = number of mickeys mouse moved vertically
  7062. Notes:    a mickey is the smallest increment the mouse can sense
  7063.     positive values indicate down/right
  7064. SeeAlso: AX=0003h,AX=001Bh,AX=0027h
  7065. --------M-33000C-----------------------------
  7066. INT 33 - MS MOUSE v1.0+ - DEFINE INTERRUPT SUBROUTINE PARAMETERS
  7067.     AX = 000Ch
  7068.     CX = call mask (see #2319)
  7069.     ES:DX -> FAR routine (see #2320)
  7070. SeeAlso: AX=0018h
  7071.  
  7072. Bitfields for mouse call mask:
  7073. Bit(s)    Description    (Table 2319)
  7074.  0    call if mouse moves
  7075.  1    call if left button pressed
  7076.  2    call if left button released
  7077.  3    call if right button pressed
  7078.  4    call if right button released
  7079.  5    call if middle button pressed (Mouse Systems/Logitech/Genius mouse)
  7080.  6    call if middle button released (Mouse Systems/Logitech/Genius mouse)
  7081.  7-15    unused
  7082. Note:    some versions of the Microsoft documentation incorrectly state that CX
  7083.       bit 0 means call if mouse cursor moves
  7084.  
  7085. (Table 2320)
  7086. Values interrupt routine is called with:
  7087.     AX = condition mask (same bit assignments as call mask)
  7088.     BX = button state
  7089.     CX = cursor column
  7090.     DX = cursor row
  7091.     SI = horizontal mickey count
  7092.     DI = vertical mickey count
  7093. Notes:    some versions of the Microsoft documentation erroneously swap the
  7094.       meanings of SI and DI
  7095.     in text modes, the row and column will be reported as a multiple of
  7096.       the character cell size, typically 8x8 pixels
  7097. --------M-33000D-----------------------------
  7098. INT 33 - MS MOUSE v1.0+ - LIGHT PEN EMULATION ON
  7099.     AX = 000Dh
  7100. SeeAlso: AX=000Eh,INT 10/AH=04h
  7101. --------M-33000E-----------------------------
  7102. INT 33 - MS MOUSE v1.0+ - LIGHT PEN EMULATION OFF
  7103.     AX = 000Eh
  7104. SeeAlso: AX=000Dh
  7105. --------M-33000F-----------------------------
  7106. INT 33 - MS MOUSE v1.0+ - DEFINE MICKEY/PIXEL RATIO
  7107.     AX = 000Fh
  7108.     CX = number of mickeys per 8 pixels horizontally (default 8)
  7109.     DX = number of mickeys per 8 pixels vertically (default 16)
  7110. SeeAlso: AX=0013h,AX=001Ah,INT 62/AX=0082h
  7111. --------M-330010-----------------------------
  7112. INT 33 - MS MOUSE v1.0+ - DEFINE SCREEN REGION FOR UPDATING
  7113.     AX = 0010h
  7114.     CX,DX = X,Y coordinates of upper left corner
  7115.     SI,DI = X,Y coordinates of lower right corner
  7116. Note:    mouse cursor is hidden in the specified region, and needs to be
  7117.       explicitly turned on again
  7118. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"Genius MOUSE",AX=0031h
  7119. --------M-330010-----------------------------
  7120. INT 33 - Genius MOUSE - DEFINE SCREEN REGION FOR UPDATING
  7121.     AX = 0010h
  7122.     ES:DX -> update region list (see #2321)
  7123. Notes:    mouse cursor is hidden in the specified region, and needs to be
  7124.       explicitly turned on again
  7125.     this version of the call is described in an August 1988 version of the
  7126.       Genius Mouse programmer's reference; it has been changed to conform
  7127.       to the Microsoft version shown above by version 9.06 (and possibly
  7128.       earlier versions)
  7129. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"MS MOUSE"
  7130.  
  7131. Format of Genius Mouse update region list:
  7132. Offset    Size    Description    (Table 2321)
  7133.  00h    WORD    left-most column
  7134.  02h    WORD    top-most row
  7135.  04h    WORD    right-most column
  7136.  06h    WORD    bottom-most row
  7137. --------M-330011-----------------------------
  7138. INT 33 - Genius Mouse 9.06 - GET NUMBER OF BUTTONS
  7139.     AX = 0011h
  7140. Return: AX = FFFFh
  7141.     BX = number of buttons
  7142. SeeAlso: AX=0000h
  7143. --------M-330012-----------------------------
  7144. INT 33 - MS MOUSE - SET LARGE GRAPHICS CURSOR BLOCK
  7145.     AX = 0012h
  7146.     BH = cursor width in words
  7147.     CH = rows in cursor
  7148.     BL = horizontal hot spot (-16 to 16)
  7149.     CL = vertical hot spot (-16 to 16)
  7150.     ES:DX -> bit map of screen and cursor maps
  7151. Return: AX = FFFFh if successful
  7152. SeeAlso: AX=0009h,AX=002Ah,AX=0035h
  7153. --------M-330013-----------------------------
  7154. INT 33 - MS MOUSE v5.0+ - DEFINE DOUBLE-SPEED THRESHOLD
  7155.     AX = 0013h
  7156.     DX = threshold speed in mickeys/second, 0000h = default of 64/second
  7157. Note:    if speed exceeds threshold, the cursor's on-screen motion is doubled
  7158. SeeAlso: AX=000Fh,AX=001Bh,AX=002Ch
  7159. --------M-330014-----------------------------
  7160. INT 33 - MS MOUSE v3.0+ - EXCHANGE INTERRUPT SUBROUTINES
  7161.     AX = 0014h
  7162.     CX = call mask (see #2319)
  7163.     ES:DX -> FAR routine
  7164. Return: CX = call mask of previous interrupt routine
  7165.     ES:DX = FAR address of previous interrupt routine
  7166. SeeAlso: AX=000Ch,AX=0018h
  7167. --------M-330015-----------------------------
  7168. INT 33 - MS MOUSE v6.0+ - RETURN DRIVER STORAGE REQUIREMENTS
  7169.     AX = 0015h
  7170. Return: BX = size of buffer needed to store driver state
  7171. SeeAlso: AX=0016h,AX=0017h,AX=0042h
  7172. --------M-330016-----------------------------
  7173. INT 33 - MS MOUSE v6.0+ - SAVE DRIVER STATE
  7174.     AX = 0016h
  7175.     BX = size of buffer (see AX=0015h)
  7176.     ES:DX -> buffer for driver state
  7177. Note:    although not documented (since the Microsoft driver does not use it),
  7178.       many drivers appear to require BX on input
  7179. SeeAlso: AX=0015h,AX=0017h
  7180. --------M-330017-----------------------------
  7181. INT 33 - MS MOUSE v6.0+ - RESTORE DRIVER STATE
  7182.     AX = 0017h
  7183.     BX = size of buffer (see AX=0015h)
  7184.     ES:DX -> buffer containing saved state
  7185. Notes:    although not documented (since the Microsoft driver does not use it),
  7186.       many drivers appear to require BX on input
  7187.     some mouse drivers range-check the values in the saved state based on
  7188.       the current video mode; thus, the video mode should be restored
  7189.       before the mouse driver's state is restored
  7190. SeeAlso: AX=0015h,AX=0016h
  7191. --------M-330018-----------------------------
  7192. INT 33 - MS MOUSE v6.0+ - SET ALTERNATE MOUSE USER HANDLER
  7193.     AX = 0018h
  7194.     CX = call mask (see #2322)
  7195.     ES:DX -> FAR routine to be invoked on mouse events (see #2323)
  7196. Return: AX = status
  7197.         0018h if successful
  7198.         FFFFh on error
  7199. Notes:    up to three handlers can be defined by separate calls to this function,
  7200.       each with a different combination of shift states in the call mask;
  7201.       calling this function again with a call mask of 0000h undefines the
  7202.       specified handler (official documentation); specifying the same
  7203.       call mask and an address of 0000h:0000h undefines the handler (real
  7204.       life)
  7205.     some versions of the documentation erroneously reverse the order of
  7206.       the bits in the call mask
  7207. SeeAlso: AX=000Ch,AX=0014h,AX=0019h
  7208.  
  7209. Bitfields for mouse call mask:
  7210. Bit(s)    Description    (Table 2322)
  7211.  0    call if mouse moves
  7212.  1    call if left button pressed
  7213.  2    call if left button released
  7214.  3    call if right button pressed
  7215.  4    call if right button released
  7216.  5    call if shift button pressed during event
  7217.  6    call if ctrl key pressed during event
  7218.  7    call if alt key pressed during event
  7219. Note:    at least one of 5-7 must be set
  7220.  
  7221. (Table 2323)
  7222. Values user handler is called with:
  7223.     AX = condition mask (same bit assignments as call mask)
  7224.     BX = button state
  7225.     CX = cursor column
  7226.     DX = cursor row
  7227.     SI = horizontal mickey count
  7228.     DI = vertical mickey count
  7229. Return: registers preserved
  7230. Note:    in text modes, the row and column will be reported as a multiple of
  7231.       the cell size, typically 8x8 pixels
  7232. --------M-330019-----------------------------
  7233. INT 33 - MS MOUSE v6.0+ - RETURN USER ALTERNATE INTERRUPT VECTOR
  7234.     AX = 0019h
  7235.     CX = call mask (see #2322)
  7236. Return: BX:DX = user interrupt vector
  7237.     CX = call mask (0000h if not found)
  7238. Note:    attempts to find a user event handler (defined by function 18h)
  7239.       whose call mask matches CX
  7240. SeeAlso: AX=0018h
  7241. --------M-33001A-----------------------------
  7242. INT 33 - MS MOUSE v6.0+ - SET MOUSE SENSITIVITY
  7243.     AX = 001Ah
  7244.     BX = horizontal speed \
  7245.     CX = vertical speed   / (see AX=000Fh)
  7246.     DX = double speed threshold (see AX=0013h)
  7247. SeeAlso: AX=0013h,AX=001Bh,INT 62/AX=0082h
  7248. --------M-33001B-----------------------------
  7249. INT 33 - MS MOUSE v6.0+ - RETURN MOUSE SENSITIVITY
  7250.     AX = 001Bh
  7251. Return: BX = horizontal speed
  7252.     CX = vertical speed
  7253.     DX = double speed threshold
  7254. SeeAlso: AX=000Bh,AX=001Ah
  7255. --------M-33001C-----------------------------
  7256. INT 33 - MS MOUSE v6.0+ - SET INTERRUPT RATE
  7257.     AX = 001Ch
  7258.     BX = rate (see #2324)
  7259. Notes:    only available on InPort mouse
  7260.     values greater than 4 may cause unpredictable driver behavior
  7261.  
  7262. (Table 2324)
  7263. Values for mouse interrupt rate:
  7264.  00h    no interrupts allowed
  7265.  01h    30 per second
  7266.  02h    50 per second
  7267.  03h    100 per second
  7268.  04h    200 per second
  7269. --------M-33001D-----------------------------
  7270. INT 33 - MS MOUSE v6.0+ - DEFINE DISPLAY PAGE NUMBER
  7271.     AX = 001Dh
  7272.     BX = display page number
  7273. Note:    the cursor will be displayed on the specified page
  7274. SeeAlso: AX=001Eh
  7275. --------M-33001E-----------------------------
  7276. INT 33 - MS MOUSE v6.0+ - RETURN DISPLAY PAGE NUMBER
  7277.     AX = 001Eh
  7278. Return: BX = display page number
  7279. SeeAlso: AX=001Dh
  7280. --------M-33001F-----------------------------
  7281. INT 33 - MS MOUSE v6.0+ - DISABLE MOUSE DRIVER
  7282.     AX = 001Fh
  7283. Return: AX = status
  7284.         001Fh successful
  7285.         ES:BX = INT 33 vector before mouse driver was first installed
  7286.         FFFFh unsuccessful
  7287. Notes:    restores vectors for INT 10 and INT 71 (8086) or INT 74 (286/386)
  7288.     if you restore INT 33 to ES:BX, driver will be completely disabled
  7289.     many drivers return AX=001Fh even though the driver has been disabled
  7290. SeeAlso: AX=0020h
  7291. --------M-330020-----------------------------
  7292. INT 33 - MS MOUSE v6.0+ - ENABLE MOUSE DRIVER
  7293.     AX = 0020h
  7294. Return: AX = status
  7295.         0020h successful
  7296.         FFFFh unsuccessful
  7297. Notes:    restores vectors for INT 10h and INT 71h (8086) or INT 74h (286/386)
  7298.       which were removed by function 1Fh
  7299.     Microsoft's documentation states that no value is returned
  7300. SeeAlso: AX=001Fh
  7301. --------M-330021-----------------------------
  7302. INT 33 - MS MOUSE v6.0+ - SOFTWARE RESET
  7303.     AX = 0021h
  7304. Return: AX = status
  7305.         FFFFh if mouse driver installed
  7306.         BX = number of buttons (FFFFh = two buttons)
  7307.         0021h if mouse driver not installed
  7308. Note:    this call is identical to funtion 00h, but does not reset the mouse
  7309. SeeAlso: AX=0000h
  7310. --------M-330022-----------------------------
  7311. INT 33 - MS MOUSE v6.0+ - SET LANGUAGE FOR MESSAGES
  7312.     AX = 0022h
  7313.     BX = language (see #2325)
  7314. Note:    only available on international versions of the driver; US versions
  7315.       ignore this call
  7316. SeeAlso: AX=0023h
  7317.  
  7318. (Table 2325)
  7319. Values for mouse driver language:
  7320.  00h    English
  7321.  01h    French
  7322.  02h    Dutch
  7323.  03h    German
  7324.  04h    Swedish
  7325.  05h    Finnish
  7326.  06h    Spanish
  7327.  07h    Portugese
  7328.  08h    Italian
  7329. --------M-330023-----------------------------
  7330. INT 33 - MS MOUSE v6.0+ - GET LANGUAGE FOR MESSAGES
  7331.     AX = 0023h
  7332. Return: BX = language (see #2325)
  7333. Note:    the US version of the driver always returns zero
  7334. SeeAlso: AX=0022h
  7335. --------M-330024-----------------------------
  7336. INT 33 - MS MOUSE v6.26+ - GET SOFTWARE VERSION, MOUSE TYPE, AND IRQ NUMBER
  7337.     AX = 0024h
  7338. Return: AX = FFFFh on error
  7339.     otherwise,
  7340.         BH = major version
  7341.         BL = minor version
  7342.         CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP)
  7343.         CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7)
  7344. SeeAlso: AX=004Dh,AX=006Dh
  7345. --------M-330025-----------------------------
  7346. INT 33 - MS MOUSE v6.26+ - GET GENERAL DRIVER INFORMATION
  7347.     AX = 0025h
  7348. Return: AX = general information (see #2326)
  7349.     BX = cursor lock flag for OS/2 to prevent reentrancy problems
  7350.     CX = mouse code active flag (for OS/2)
  7351.     DX = mouse driver busy flag (for OS/2)
  7352.  
  7353. Bitfields for general mouse driver information:
  7354. Bit(s)    Description    (Table 2326)
  7355.  15    driver loaded as device driver rather than TSR
  7356.  14    driver is newer integrated type
  7357.  13,12    current cursor type
  7358.     00 software text cursor
  7359.     01 hardware text cursor (CRT Controller's cursor)
  7360.     1X graphics cursor
  7361.  11-8    interrupt rate (see #2324)
  7362.  7-0    count of currently-active Mouse Display Drivers (MDD), the newer
  7363.       integrated driver type
  7364. --------M-330026-----------------------------
  7365. INT 33 - MS MOUSE v6.26+ - GET MAXIMUM VIRTUAL COORDINATES
  7366.     AX = 0026h
  7367. Return: BX = mouse-disabled flag (0000h mouse enabled, nonzero disabled)
  7368.     CX = maximum virtual X (for current video mode)
  7369.     DX = maximum virtual Y
  7370. Note:    for driver versions before 7.05, this call returns the currently-set
  7371.       maximum coordinates; v7.05+ returns the absolute maximum coordinates
  7372. SeeAlso: AX=0031h
  7373. --------M-330026-----------------------------
  7374. INT 33 - Genius Mouse 9.06 - ???
  7375.     AX = 0026h
  7376. Return: CX = 0204h if CX was 0105h on entry, else unchanged
  7377. --------M-330027-----------------------------
  7378. INT 33 - MS MOUSE v7.01+ - GET SCREEN/CURSOR MASKS AND MICKEY COUNTS
  7379.     AX = 0027h
  7380. Return: AX = screen-mask value (or hardware cursor scan-line start for v7.02+)
  7381.     BX = cursor-mask value (or hardware cursor scan-line stop for v7.02+)
  7382.     CX = horizontal mickeys moved since last call
  7383.     DX = vertical mickeys moved since last call
  7384. SeeAlso: AX=000Bh
  7385. --------M-330028-----------------------------
  7386. INT 33 - MS MOUSE v7.0+ - SET VIDEO MODE
  7387.     AX = 0028h
  7388.     CX = new video mode (call is NOP if 0000h)
  7389.     DH = Y font size (00h = default)
  7390.     DL = X font size (00h = default)
  7391. Return: CL = status (00h = successful)
  7392. Notes:    DX is ignored unless the selected video mode supports font size control
  7393.     when CX=0000h, an internal flag that had been set by a previous call
  7394.       is cleared; this is required before a mouse reset
  7395. SeeAlso: AX=0029h,INT 10/AH=00h
  7396. --------M-330029-----------------------------
  7397. INT 33 - MS MOUSE v7.0+ - ENUMERATE VIDEO MODES
  7398.     AX = 0029h
  7399.     CX = previous video mode
  7400.         0000h get first supported video mode
  7401.         other get next supported mode after mode CX
  7402. Return: CX = first/next video mode (0000h = no more video modes)
  7403.     DS:DX -> description of video mode or 0000h:0000h if none
  7404. Notes:    the enumerated video modes may be in any order and may repeat
  7405.     the description string (if available) is terminated by '$' followed by
  7406.       a NUL byte
  7407. SeeAlso: AX=0028h
  7408. --------M-33002A-----------------------------
  7409. INT 33 - MS MOUSE v7.02+ - GET CURSOR HOT SPOT
  7410.     AX = 002Ah
  7411. Return: AX = internal counter controlling cursor visibility
  7412.     BX = cursor hot spot column
  7413.     CX = cursor hot spot row
  7414.     DX = mouse type (see #2327)
  7415. Note:    the hot spot location is relative to the upper left corner of the
  7416.       cursor block and may range from -128 to +127 both horizontally and
  7417.       vertically
  7418. SeeAlso: AX=0009h,AX=0012h,AX=0035h
  7419.  
  7420. (Table 2327)
  7421. Values for mouse type:
  7422.  00h    none
  7423.  01h    bus
  7424.  02h    serial
  7425.  03h    InPort
  7426.  04h    IBM
  7427.  05h    Hewlett-Packard
  7428. --------M-33002B-----------------------------
  7429. INT 33 - MS MOUSE v7.0+ - LOAD ACCELERATION PROFILES
  7430.     AX = 002Bh
  7431.     BX = active acceleration profile
  7432.         0001h-0004h or FFFFh to restore default curves
  7433.     ES:SI -> buffer containing acceleration profile data (see #2328)
  7434. Return: AX = success flag
  7435. SeeAlso: AX=002Ch,AX=002Dh,AX=0033h
  7436.  
  7437. Format of acceleration profile data:
  7438. Offset    Size    Description    (Table 2328)
  7439.  00h    BYTE    length of acceleration profile 1
  7440.  01h    BYTE    length of acceleration profile 2
  7441.  02h    BYTE    length of acceleration profile 3
  7442.  03h    BYTE    length of acceleration profile 4
  7443.  04h 32 BYTEs    threshold speeds for acceleration profile 1
  7444.  24h 32 BYTEs    threshold speeds for acceleration profile 2
  7445.  44h 32 BYTEs    threshold speeds for acceleration profile 3
  7446.  64h 32 BYTEs    threshold speeds for acceleration profile 4
  7447.  84h 32 BYTEs    speedup factor for acceleration profile 1
  7448.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  7449.  A4h 32 BYTEs    speedup factor for acceleration profile 2
  7450.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  7451.  C4h 32 BYTEs    speedup factor for acceleration profile 3
  7452.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  7453.  E4h 32 BYTEs    speedup factor for acceleration profile 4
  7454.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  7455. 104h 16 BYTEs    name of acceleration profile 1 (blank-padded)
  7456. 114h 16 BYTEs    name of acceleration profile 2 (blank-padded)
  7457. 124h 16 BYTEs    name of acceleration profile 3 (blank-padded)
  7458. 134h 16 BYTEs    name of acceleration profile 4 (blank-padded)
  7459. Note:    unused bytes in the threshold speed fields are filled with 7Fh and
  7460.       unused bytes in the speedup factor fields are filled with 10h
  7461. --------M-33002C-----------------------------
  7462. INT 33 - MS MOUSE v7.0+ - GET ACCELERATION PROFILES
  7463.     AX = 002Ch
  7464. Return: AX = status (0000h success)
  7465.     BX = currently-active acceleration profile
  7466.     ES:SI -> acceleration profile data (see #2328)
  7467. SeeAlso: AX=002Bh,AX=002Dh,AX=0033h
  7468. --------M-33002D-----------------------------
  7469. INT 33 - MS MOUSE v7.0+ - SELECT ACCELERATION PROFILE
  7470.     AX = 002Dh
  7471.     BX = acceleration level
  7472.         0001h-0004h to set profile, or FFFFh to get current profile
  7473. Return: AX = status
  7474.         0000h successful
  7475.         ES:SI -> 16-byte blank-padded name of acceleration profile
  7476.         FFFEh invalid acceleration curve number
  7477.         ES:SI destroyed
  7478.     BX = active acceleration curve number
  7479. SeeAlso: AX=0013h,AX=002Bh,AX=002Ch,AX=002Eh
  7480. --------M-33002E-----------------------------
  7481. INT 33 - MS MOUSE v8.10+ - SET ACCELERATION PROFILE NAMES
  7482.     AX = 002Eh
  7483.     BL = flag (if nonzero, fill ES:SI buffer with default names on return)
  7484.     ES:SI -> 64-byte buffer containing profile names (16 bytes per name)
  7485. Return: AX = status (0000h success)
  7486.         FFFEh error for ATI Mouse driver
  7487.     ES:SI buffer filled with default names if BL nonzero on entry
  7488. Notes:    not supported by Logitech driver v6.10
  7489.     supported by ATI Mouse driver v7.04
  7490. SeeAlso: AX=002Ch,AX=002Dh,AX=012Eh,AX=022Eh
  7491. --------M-33002F-----------------------------
  7492. INT 33 - MS MOUSE v7.02+ - MOUSE HARDWARE RESET
  7493.     AX = 002Fh
  7494. Return: AX = status
  7495. Note:    invoked by mouse driver v8.20 on being called with INT 2F/AX=530Bh
  7496. SeeAlso: INT 2F/AH=53h
  7497. --------M-330030-----------------------------
  7498. INT 33 - MS MOUSE v7.04+ - GET/SET BallPoint INFORMATION
  7499.     AX = 0030h
  7500.     CX = command
  7501.         0000h get status of BallPoint device
  7502.         other set rotation angle and masks
  7503.         BX = rotation angle (-32768 to 32767 degrees)
  7504.         CH = primary button mask
  7505.         CL = secondary button mask
  7506. Return: AX = button status (FFFFh if no BallPoint) (see #2329)
  7507.     BX = rotation angle (0-360 degrees)
  7508.     CH = primary button mask
  7509.     CL = secondary button mask
  7510. Note:    not supported by the ATI Mouse driver which calls itself v7.04
  7511.  
  7512. Bitfields for BallPoint mouse button status:
  7513. Bit(s)    Description    (Table 2329)
  7514.  5    button 1
  7515.  4    button 2
  7516.  3    button 3
  7517.  2    button 4
  7518.  other    zero
  7519. --------M-330031-----------------------------
  7520. INT 33 - MS MOUSE v7.05+ - GET CURRENT MINIMUM/MAXIMUM VIRTUAL COORDINATES
  7521.     AX = 0031h
  7522. Return: AX = virtual X minimum
  7523.     BX = virtual Y minimum
  7524.     CX = virtual X maximum
  7525.     DX = virtual Y maximum
  7526. Note:    the minimum and maximum values are those set by AX=0007h and AX=0008h;
  7527.       the default is minimum = 0 and maximum = absolute maximum
  7528.       (see AX=0026h)
  7529. SeeAlso: AX=0007h,AX=0008h,AX=0010h,AX=0026h
  7530. --------M-330032-----------------------------
  7531. INT 33 - MS MOUSE v7.05+ - GET ACTIVE ADVANCED FUNCTIONS
  7532.     AX = 0032h
  7533. Return: AX = active function flags (FFFFh for v8.10)
  7534.         bit 15: function 0025h supported
  7535.         bit 14: function 0026h supported
  7536.         ...
  7537.         bit 0:  function 0034h supported
  7538.     BX = ??? (0000h) officially unused
  7539.     CX = ??? (E000h) officially unused
  7540.     DX = ??? (0000h) officially unused
  7541. Note:    the Italian version of MS MOUSE v8.20 reportedly indicates that
  7542.       functions 0033h and 0034h are not supported even though they are
  7543. --------M-330033-----------------------------
  7544. INT 33 - MS MOUSE v7.05+ - GET SWITCH SETTINGS AND ACCELERATION PROFILE DATA
  7545.     AX = 0033h
  7546.     CX = size of buffer
  7547.         0000h get required buffer size
  7548.         Return: AX = 0000h
  7549.             CX = required size (0154h for Logitech v6.10, 0159h
  7550.                 for MS v8.10-8.20)
  7551.         other
  7552.         ES:DX -> buffer of CX bytes for mouse settings
  7553.         Return: AX = 0000h
  7554.             CX = number of bytes returned
  7555.             ES:DX buffer filled (see #2330)
  7556. SeeAlso: AX=002Bh
  7557.  
  7558. Format of mouse settings data buffer:
  7559. Offset    Size    Description    (Table 2330)
  7560.  00h    BYTE    mouse type
  7561.  01h    BYTE    current language
  7562.  02h    BYTE    horizontal sensitivity (00h-64h)
  7563.  03h    BYTE    vertical sensitivity (00h-64h)
  7564.  04h    BYTE    double-speed threshold (00h-64h)
  7565.  05h    BYTE    ballistic curve (01h-04h)
  7566.  06h    BYTE    interrupt rate (01h-04h)
  7567.  07h    BYTE    cursor override mask
  7568.  08h    BYTE    laptop adjustment
  7569.  09h    BYTE    memory type (00h-02h)
  7570.  0Ah    BYTE    SuperVGA support (00h,01h)
  7571.  0Bh    BYTE    rotation angle
  7572.  0Ch    BYTE    ???
  7573.  0Dh    BYTE    primary button (01h-04h)
  7574.  0Eh    BYTE    secondary button (01h-04h)
  7575.  0Fh    BYTE    click lock enabled (00h,01h)
  7576.  10h 324 BYTEs    acceleration profile data (see #2328)
  7577. 154h  5 BYTEs    ??? (Microsoft driver, but not Logitech)
  7578. --------M-330034-----------------------------
  7579. INT 33 - MS MOUSE v8.0+ - GET INITIALIZATION FILE
  7580.     AX = 0034h
  7581. Return: AX = status (0000h successful)
  7582.     ES:DX -> ASCIZ initialization (.INI) file name
  7583. --------M-330035-----------------------------
  7584. INT 33 - MS MOUSE v8.10+ - LCD SCREEN LARGE POINTER SUPPORT
  7585.     AX = 0035h
  7586.     BX = function
  7587.         FFFFh get current settings
  7588.         Return: AX = 0000h
  7589.             BH = style (see #2331)
  7590.             BL = size (see below)
  7591.             CH = threshold
  7592.             CL = active flag (00h disabled, 01h enabled)
  7593.             DX = delay
  7594.         other
  7595.         BH = pointer style (see #2331)
  7596.         BL = size (00h small "1", 01h medium "1.5", 02h large "2")
  7597.         CH = threshold (00h-64h)
  7598.         CL = active flag (00h disable size change, 01h enable)
  7599.         DX = delay (0000h-0064h)
  7600.         Return: AX = 0000h
  7601. Note:    not supported by Logitech driver v6.10
  7602. SeeAlso: AX=0012h,AX=002Ah
  7603.  
  7604. (Table 2331)
  7605. Values for pointer style:
  7606.  00h    normal
  7607.  01h    reverse
  7608.  02h    transparent
  7609. --------M-330042-----------------------------
  7610. INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
  7611.     AX = 0042h
  7612. Return: AX = status
  7613.         0000h MSMOUSE not installed
  7614.         0042h functions 42h, 50h, and 52h not supported
  7615.         FFFFh successful
  7616.         BX = buffer size in bytes for functions 50h and 52h
  7617. Note:    this function is also supported by the Genius Mouse 9.06 driver
  7618. SeeAlso: AX=0015h,AX=0050h,AX=0052h
  7619. --------M-330043-----------------------------
  7620. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - CONFIGURE MOUSE???
  7621.     AX = 0043h
  7622.     CX:BX -> configuration buffer (see #2332)
  7623.     DL = ???
  7624. Return: ???
  7625. Notes:    also calls routines for INT 33/AX=0053h and INT 33/AX=004Fh
  7626.     this function is also supported by the Genius Mouse 9.06 driver
  7627.  
  7628. Format of Mouse Systems configuration buffer:
  7629. Offset    Size    Description    (Table 2332)
  7630.  00h    WORD    I/O port address
  7631.  02h    BYTE    ???
  7632.  03h    BYTE    interrupt number
  7633.  04h    BYTE    interrupt mask for interrupt controller
  7634.  05h  5 BYTEs    ???
  7635. --------M-330044CXCDEF-----------------------
  7636. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - TOGGLE IGNORE ACCELERATION CMDS
  7637.     AX = 0044h
  7638.     CX = CDEFh
  7639. Return: AX = new state of "Ignore Application Acceleration Commands" flag
  7640. Note:    this function is also supported by the Genius Mouse 9.06 driver
  7641. SeeAlso: AX=0045h
  7642. --------M-330045CXCDEF-----------------------
  7643. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - TOGGLE RESOLUTION DOUBLING
  7644.     AX = 0045h
  7645.     CX = CDEFh
  7646. Return: AX = new state of resolution doubling flag
  7647. Note:    this function is also supported by the Genius Mouse 9.06 driver
  7648. SeeAlso: AX=0044h
  7649. --------M-330047-----------------------------
  7650. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - SET BUTTON ASSIGNMENTS
  7651.     AX = 0047h
  7652.     ES:BX -> button assignments (3 bytes, combinations of "L", "M", "R")
  7653. Return: ???
  7654. Note:    also supported by Genius Mouse 9.06 driver
  7655. SeeAlso: AX=0067h
  7656. --------M-330048BXCDEF-----------------------
  7657. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - GET ???
  7658.     AX = 0048h
  7659.     BX = CDEFh
  7660. Return: CX = ???
  7661.     BH = ???
  7662.     BL = ??? (if 50h, driver is using PS/2 pointing device BIOS interface)
  7663. Note:    also supported by Genius Mouse 9.06 driver
  7664. --------M-33004B-----------------------------
  7665. INT 33 - Z-NIX MOUSE DRIVER v7.04d - INSTALLATION CHECK
  7666.     AX = 004Bh
  7667. Return: ES:DI -> signature/description string if installed
  7668. Note:    the signature string in v7.04d is
  7669.       "Z-NIX;BUS,AUX,Serial 3-byte and 5-byte Mouse Driver;ZMOUSE;v7.04d"
  7670. --------M-33004CBXCDEF-----------------------
  7671. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - SET ??? FLAG
  7672.     AX = 004Ch
  7673.     BX = CDEFh
  7674. Note:    also supported by Genius Mouse 9.06
  7675. SeeAlso: AX=006Ch
  7676. --------M-33004D-----------------------------
  7677. INT 33 - MS MOUSE - RETURN POINTER TO COPYRIGHT STRING
  7678.     AX = 004Dh
  7679. Return: ES:DI -> copyright message "*** This is Copyright 1983 Microsoft" or
  7680.         "Copyright 19XX...."
  7681. Notes:    also supported by Logitech, Kraft, Genius Mouse, and Mouse Systems
  7682.       mouse drivers
  7683.     in the Genius Mouse 9.06 driver, the ASCIZ signature "KYE" immediately
  7684.       follows the above copyright message (KYE Corp. manufactures the
  7685.       driver)
  7686. SeeAlso: AX=0024h,AX=006Dh,AX=0666h
  7687. --------M-33004F-----------------------------
  7688. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - ENABLE MOUSE
  7689.     AX = 004Fh
  7690. Return: nothing
  7691. Note:    also supported by Genius Mouse 9.06
  7692. SeeAlso: AX=0043h,AX=0053h
  7693. --------M-330050-----------------------------
  7694. INT 33 - PCMOUSE - SAVE MSMOUSE STATE
  7695.     AX = 0050h
  7696.     BX = buffer size (ignored by some driver versions)
  7697.     ES:DX -> buffer
  7698. Return: AX = FFFFh if successful
  7699. Notes:    the buffer must be large enough to hold the entire state, or following
  7700.       data will be overwritten by state data in versions which ignore BX;
  7701.       use INT 33/AX=0042h to get the required size
  7702.     this function is also supported by the Genius Mouse 9.06 driver
  7703. SeeAlso: AX=0042h,AX=0052h
  7704. --------M-330052-----------------------------
  7705. INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
  7706.     AX = 0052h
  7707.     BX = buffer size (ignored by some driver versions)
  7708.     ES:DX -> buffer
  7709. Return: AX = FFFFh if successful
  7710. Note:    also supported by Genius Mouse 9.06 driver
  7711. SeeAlso: AX=0050h
  7712. --------M-330053-----------------------------
  7713. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - DISABLE MOUSE
  7714.     AX = 0053h
  7715. Return: nothing
  7716. Note:    also supported by Genius Mouse 9.06
  7717. SeeAlso: AX=0043h,AX=004Fh
  7718. --------M-330054CXCDEF-----------------------
  7719. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - SELECT ULTRARES ACCELERATION LEVEL
  7720.     AX = 0054h
  7721.     CX = CDEFh
  7722.     BX = new acceleration level (0-9)
  7723. Return: ???
  7724. Note:    this function is also supported by the Genius Mouse 9.06 driver
  7725. SeeAlso: AX=005Ah
  7726. --------M-330055-----------------------------
  7727. INT 33 - Kraft Mouse - GET ???
  7728.     AX = 0055h
  7729. Return: CX = ???
  7730.     DX = ???
  7731.     ES = ???
  7732. --------M-330058-----------------------------
  7733. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - ???
  7734.     AX = 0058h
  7735. Return: AX = CS of driver
  7736.     CX:BX = original INT 33 vector
  7737.     DX = ???
  7738. Note:    this function is also supported by the Genius Mouse 9.06 driver
  7739. --------M-33005A-----------------------------
  7740. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - SET ULTRARES ACCELERATIONS
  7741.     AX = 005Ah
  7742.     CX = number of WORDs to copy (max 0014h, but not range-checked)
  7743.     DX:SI -> buffer containing thresholds??? (CX words)
  7744.     DX:BX -> buffer containing acceleration values???
  7745.         (9*14h words, only first CX of each 14h used)
  7746.     ???
  7747. Return: CF clear
  7748.     ???
  7749. Note:    this function is also supported by Genius Mouse 9.06
  7750. SeeAlso: AX=0054h
  7751. --------M-330061BXCDEF-----------------------
  7752. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - ???
  7753.     AX = 0061h
  7754.     BX = CDEFh
  7755. Return: CX = ???
  7756. Note:    also supported by Genius Mouse 9.06
  7757. --------M-330067-----------------------------
  7758. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - GET MOUSE BUTTONS???
  7759.     AX = 0067h
  7760. Return: BL = number of buttons???
  7761. Note:    also supported by Genius Mouse 9.06
  7762. SeeAlso: AX=0047h
  7763. --------M-33006A-----------------------------
  7764. INT 33 U - ATI Mouse - INSTALLATION CHECK
  7765.     AX = 006Ah
  7766. Return: AL = AAh
  7767.     AH = ???
  7768.     BH = ???
  7769.     BL = ???
  7770.     CL = ???
  7771.     CH = ???
  7772. Program: ATI's MOUSE.COM and MOUSE.SYS are drivers for the mouse port found on
  7773.       some of ATI's video adapters
  7774. SeeAlso: AX=006Dh
  7775. --------M-33006C-----------------------------
  7776. INT 33 U - TRUEDOX Mouse driver v4.01 - GET/SET HARDWARE PARAMETERS
  7777.     AX = 006Ch
  7778.     BX = new IRQ (0003h or 0004h), or 0000h to get current values only
  7779.     CL = new IRQmask (sent to 8259)
  7780.     DX = new base I/O port
  7781. Return: BX = current IRQ
  7782.     DX = light pen state???
  7783. Note:    this is the mouse driver for the Dell Dimension series of computers, by
  7784.       TRUEDOX Technology Corporation
  7785. SeeAlso: AX=00A1h,AX=0666h
  7786. --------M-33006CBXCDEF-----------------------
  7787. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - CLEAR ??? FLAG
  7788.     AX = 006Ch
  7789.     BX = CDEFh
  7790. Note:    also supported by Genius Mouse 9.06
  7791. SeeAlso: AX=004Ch
  7792. --------M-33006D-----------------------------
  7793. INT 33 - MS MOUSE - GET VERSION STRING
  7794.     AX = 006Dh
  7795. Return: ES:DI -> Microsoft version number of resident driver (see #2333)
  7796. Notes:    also supported by Logitech, Mouse Systems, Kraft, and Genius mouse
  7797.       drivers
  7798.     the Mouse Systems 7.01 and Genius Mouse 9.06 drivers report their
  7799.       Microsoft version as 7.00 even though they do not support any of the
  7800.       functions from 0025h through 002Dh supported by the MS 7.00 driver
  7801.       (the Genius Mouse driver supports function 0026h, but it differs
  7802.       from the Microsoft function)
  7803.     the TRUEDOX 4.01 driver reports its version as 6.26 through this call,
  7804.       but as 6.24 through AX=0024h
  7805. SeeAlso: AX=0024h,AX=004Dh,AX=006Ah,AX=266Ch
  7806.  
  7807. Format of Microsoft version number:
  7808. Offset    Size    Description    (Table 2333)
  7809.  00h    BYTE    major version
  7810.  01h    BYTE    minor version (BCD)
  7811. --------M-330070BXABCD-----------------------
  7812. INT 33 - Mouse Systems MOUSE DRIVER - POPUP.COM - INSTALLATION CHECK
  7813.     AX = 0070h
  7814.     BX = ABCDh
  7815. Return: AX = ABCDh if installed
  7816.         BX:CX -> data structure (see #2334)
  7817. Notes:    this function is also supported by the Genius Mouse 9.06 driver
  7818.     the v7.01 POPUP.COM and menu drivers also check for the signature
  7819.       CDh ABh BAh DCh at offset -2Ch from the interrupt handler
  7820.     if POPUP is not loaded, the returned data structure contains the proper
  7821.       signature at offset 00h, but not at offset 08h
  7822.  
  7823. Format of Mouse Systems POPUP.COM data structure:
  7824. Offset    Size    Description    (Table 2334)
  7825.  00h    WORD    signature ABCDh
  7826.  02h    DWORD    pointer to info structure??? (see #2335)
  7827.  06h  2 BYTEs    ???
  7828.  08h    WORD    signature ABCDh
  7829.  
  7830. Format of Mouse Systems POPUP.COM info structure:
  7831. Offset    Size    Description    (Table 2335)
  7832.  00h    WORD    driver version
  7833.  02h  8 BYTEs    ???
  7834.  0Ah    WORD    segment of ???
  7835.     ???
  7836. --------M-330072BXABCD-----------------------
  7837. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - ???
  7838.     AX = 0072h
  7839.     BX = ABCDh
  7840. Return: ???
  7841. Note:    this function is also supported by the Genius Mouse 9.06 driver
  7842. --------M-330073BXCDEF-----------------------
  7843. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - GET BUTTON ASSIGNMENTS
  7844.     AX = 0073h
  7845.     BX = CDEFh
  7846.     ES:DX -> 3-byte buffer for button assignments
  7847. Return: CX = number of buttons???
  7848.     ES:DX buffer filled (default is "LMR")
  7849. Note:    also supported by Genius Mouse 9.06
  7850. SeeAlso: AX=0067h
  7851. --------M-3300A0-----------------------------
  7852. INT 33 U - TRUEDOX Mouse driver - SET HARDWARE PC MODE (3 button)
  7853.     AX = 00A0h
  7854. Return: nothing
  7855. Note:    this function is only available if the mouse mode is switchable
  7856.       through the power pins
  7857. SeeAlso: AX=006Ch"TRUEDOX",AX=00A1h"TRUEDOX"
  7858. --------M-3300A1-----------------------------
  7859. INT 33 U - TRUEDOX Mouse driver - SET HARDWARE MS MODE (2 button)
  7860.     AX = 00A1h
  7861. Return: nothing
  7862. Notes:    this function is only available if the mouse mode is switchable
  7863.       through the power pins
  7864.     this is the mouse driver for the Dell Dimension series of computers, by
  7865.       TRUEDOX Technology Corporation
  7866. SeeAlso: AX=006Ch"TRUEDOX",AX=00A0h"TRUEDOX",AX=00A6h,AX=0666h
  7867. --------M-3300A6-----------------------------
  7868. INT 33 U - TRUEDOX Mouse driver - SET RESOLUTION
  7869.     AX = 00A6h
  7870.     BX = new software resolution
  7871.         0001h 50-200 dpi
  7872.         0002h 200-400 dpi
  7873.         0003h 400-800 dpi
  7874. Note:    this is the mouse driver for the Dell Dimension series of computers, by
  7875.       TRUEDOX Technology Corporation
  7876. SeeAlso: AX=00A0h,AX=00A1h,AX=0666h
  7877. --------M-330100CX4752-----------------------
  7878. INT 33 - GRTMOUSE v1.00+ - INSTALLATION CHECK
  7879.     AX = 0100h
  7880.     CX = 4752h ('GR')
  7881.     DX = 544Dh ('TM')
  7882. Return: AX = 474Dh ('GM') if installed
  7883.         CX = version number (CH = major, CL = minor)
  7884. Program: GRTMOUSE is a graphical-cursor driver for textmode by Tommer Leyvand
  7885. SeeAlso: AX=0101h,AX=0102h,AX=0103h,AX=0104h
  7886. --------M-330101-----------------------------
  7887. INT 33 - GRTMOUSE v1.00+ - SET MOUSE CURSOR SHAPE
  7888.     AX = 0101h
  7889.     DS:SI -> 16-byte cursor pattern
  7890. Return: CF clear if successful
  7891. SeeAlso: AX=0100h,AX=0102h
  7892. --------M-330102-----------------------------
  7893. INT 33 - GRTMOUSE v1.00+ - GET MOUSE CURSOR SHAPE
  7894.     AX = 0102h
  7895.     ES:DI -> 16-byte buffer for cursor pattern
  7896. SeeAlso: AX=0100h,AX=0101h
  7897. --------M-330103-----------------------------
  7898. INT 33 - GRTMOUSE v1.00+ - SET ACTIVE CHARACTERS
  7899.     AX = 0103h
  7900.     CH,CL,DH,DL = ASCII codes to be remapped to display mouse pointer
  7901. Note:    the default active characters are D0h,D1h,D6h,D8h; the active
  7902.      characters should be in the range C0h to DFh
  7903. SeeAlso: AX=0100h,AX=0104h
  7904. --------M-330104-----------------------------
  7905. INT 33 - GRTMOUSE v1.00+ - GET ACTIVE CHARACTERS
  7906.     AX = 0104h
  7907. Return: CH,CL,DH,DL = ASCII codes for the active characters
  7908. SeeAlso: AX=0100h,AX=0103h
  7909. --------M-33012E-----------------------------
  7910. INT 33 - MS MOUSE v8.10+ - ???
  7911.     AX = 012Eh
  7912.     BL = ???
  7913. Return: AX = 0000h (MS)
  7914.     AX = FFFFh (ATI Mouse v7.04)
  7915. Note:    not supported by Logitech driver v6.10
  7916. SeeAlso: AX=002Eh,AX=022Eh
  7917. --------M-33022E-----------------------------
  7918. INT 33 - MS MOUSE v8.10+ - ???
  7919.     AX = 022Eh
  7920.     BL = ???
  7921. Return: AX = 0000h (MS)
  7922.     AX = FFFFh (ATI Mouse v7.04)
  7923. Note:    not supported by Logitech driver v6.10
  7924. SeeAlso: AX=002Eh,AX=012Eh
  7925. --------M-330666-----------------------------
  7926. INT 33 U - TRUEDOX Mouse driver v4.01 - GET COPYRIGHT STRING
  7927.     AX = 0666h
  7928. Return: DX:AX -> ASCII "Copyright 1987-1992 TRUEDOX Technology Corporation"
  7929. Note:    this is the mouse driver for the Dell Dimension series of computers,
  7930.       by TRUEDOX Technology Corporation
  7931. SeeAlso: AX=004Dh,AX=00A6h,AX=0666h
  7932. --------M-33136C-----------------------------
  7933. INT 33 - LOGITECH MOUSE v6.10+ - ???
  7934.     AX = 136Ch
  7935.     BX = ???
  7936. Return: AX = ???
  7937.     BX = ???
  7938. --------M-33146C-----------------------------
  7939. INT 33 - LOGITECH MOUSE v6.10+ - GET/SET ???
  7940.     AX = 146Ch
  7941.     BL = function
  7942.         00h set ???
  7943.         BH = new value (zero/nonzero to clear/set)
  7944.         else get ???
  7945.         Return: ???
  7946. --------M-33156C-----------------------------
  7947. INT 33 - LOGITECH MOUSE v6.10+ - GET SIGNATURE AND VERSION STRINGS
  7948.     AX = 156Ch
  7949. Return: ES:DI -> signature "LOGITECH MOUSE DRIVER"
  7950.     ES:SI -> version string, terminated with CRLF
  7951. --------M-33166C-----------------------------
  7952. INT 33 - LOGITECH MOUSE v6.10+ - ???
  7953.     AX = 166Ch
  7954.     BL = ???
  7955.         00h ???
  7956.         01h ???
  7957.         other ???
  7958.         BH = new value of ???
  7959.         Return: AX = FFFFh
  7960. --------M-33176C-----------------------------
  7961. INT 33 - LOGITECH MOUSE v6.10+ - ???
  7962.     AX = 176Ch
  7963.     ???
  7964. Return: ???
  7965. --------M-33186C-----------------------------
  7966. INT 33 - LOGITECH MOUSE v6.10+ - ???
  7967.     AX = 186Ch
  7968.     ???
  7969. Return: ???
  7970. --------M-33196C-----------------------------
  7971. INT 33 - LOGITECH MOUSE v6.10+ - ???
  7972.     AX = 196Ch
  7973.     ???
  7974. Return: ???
  7975. --------M-331A6C-----------------------------
  7976. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  7977.     AX = 1A6Ch
  7978. Return: AX = FFFFh
  7979.     BX = ???
  7980.     CX = ???
  7981. SeeAlso: AX=1B6Ch
  7982. --------M-331B6C-----------------------------
  7983. INT 33 - LOGITECH MOUSE v6.10+ - SET ???
  7984.     AX = 1B6Ch
  7985.     BX = new value for ??? (0000h-0003h)
  7986. Return: AX = FFFFh
  7987. SeeAlso: AX=1A6Ch
  7988. --------M-331C6C-----------------------------
  7989. INT 33 - LOGITECH MOUSE v6.10+ - ???
  7990.     AX = 1C6Ch
  7991.     BX = ???
  7992.         <42h ???
  7993.         =42h ???
  7994.         >42h ???
  7995.         ES:DI -> ???
  7996.         Return: AX = ???
  7997. --------M-331D6C-----------------------------
  7998. INT 33 - LOGITECH MOUSE - GET COMPASS PARAMETER
  7999.     AX = 1D6Ch
  8000. Return: BX = direction (0=north, 1=south, 2=east, 3=west)
  8001. SeeAlso: AX=1E6Ch
  8002. --------M-331E6C-----------------------------
  8003. INT 33 - LOGITECH MOUSE - SET COMPASS PARAMETER
  8004.     AX = 1E6Ch
  8005.     BX = direction (0=north, 1=south, 2=east, 3=west)
  8006. SeeAlso: AX=1D6Ch
  8007. --------M-331F6C-----------------------------
  8008. INT 33 - LOGITECH MOUSE - GET BALLISTICS INFORMATION
  8009.     AX = 1F6Ch
  8010. Return: BX = 0=off, 1=on
  8011.     CX = 1=low, 2=high
  8012. SeeAlso: AX=002Ch,AX=236Ch
  8013. --------M-33206C-----------------------------
  8014. INT 33 - LOGITECH MOUSE - SET LEFT OR RIGHT PARAMETER
  8015.     AX = 206Ch
  8016.     BX = parameter (00h = right, FFh = left)
  8017. SeeAlso: AX=216Ch
  8018. --------M-33216C-----------------------------
  8019. INT 33 - LOGITECH MOUSE - GET LEFT OR RIGHT PARAMETER
  8020.     AX = 216Ch
  8021. Return: BX = parameter (00h = right, FFh = left)
  8022. SeeAlso: AX=206Ch
  8023. --------M-33226C-----------------------------
  8024. INT 33 - LOGITECH MOUSE - REMOVE DRIVER FROM MEMORY
  8025.     AX = 226Ch
  8026. Note:    this only frees memory; does not restore hooked interrupts
  8027. --------M-33236C-----------------------------
  8028. INT 33 - LOGITECH MOUSE - SET BALLISTICS INFORMATION
  8029.     AX = 236Ch
  8030.     BX = 0=off, 1=on
  8031.     CX = 1=low, 2=high
  8032. SeeAlso: AX=002Ch,AX=1F6Ch
  8033. --------M-33246C-----------------------------
  8034. INT 33 - LOGITECH MOUSE - GET PARAMETERS AND RESET SERIAL MOUSE
  8035.     AX = 246Ch
  8036.     ES:DX -> parameter table buffer (see #2336)
  8037. Return: AX = FFFFh if driver installed for serial mouse
  8038. SeeAlso: AX=0000h,AX=256Ch/BX=0000h,AX=256Ch/BX=0001h,AX=256Ch/BX=0003h
  8039.  
  8040. Format of Logitech Mouse parameter table:
  8041. Offset    Size    Description    (Table 2336)
  8042.  00h    WORD    baud rate divided by 100  (serial mouse only)
  8043.  02h    WORD    emulation          (serial mouse only)
  8044.  04h    WORD    report rate          (serial mouse only)
  8045.  06h    WORD    firmware revision      (serial mouse only)
  8046.  08h    WORD    00h              (serial mouse only)
  8047.  0Ah    WORD    port              (serial mouse only)
  8048.  0Ch    WORD    physical buttons
  8049.  0Eh    WORD    logical buttons
  8050. --------M-33256CBX0000-----------------------
  8051. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET BAUD RATE (SERIAL MOUSE ONLY)
  8052.     AX = 256Ch
  8053.     BX = 0000h
  8054.     CX = rate (0=1200, 1=2400, 2=4800, 3=9600)
  8055. Return: AX = FFFFh if driver installed for serial mouse
  8056. SeeAlso: AX=246Ch,AX=256Ch/BX=0001h,AX=256Ch/BX=0002h,AX=276Ch
  8057. --------M-33256CBX0001-----------------------
  8058. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET EMULATION (SERIAL MOUSE ONLY)
  8059.     AX = 256Ch
  8060.     BX = 0001h
  8061.     CX = emulation type (see #2337)
  8062. Return: AX = FFFFh if driver installed for serial mouse
  8063. SeeAlso: AX=246Ch,AX=256Ch/BX=0000h,AX=256Ch/BX=0003h,AX=276Ch
  8064.  
  8065. (Table 2337)
  8066. Values for Logitech mouse emulation type:
  8067.  00h    5 byte packed binary
  8068.  01h    3 byte packed binary
  8069.  02h    hexadecimal
  8070.  03h    relative bit pad
  8071.  04h    not supported
  8072.  05h    MM Series
  8073.  06h    not supported
  8074.  07h    Microsoft
  8075. --------M-33256CBX0002-----------------------
  8076. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET REPORT RATE (SERIAL MOUSE ONLY)
  8077.     AX = 256Ch
  8078.     BX = 0002h
  8079.     CX = rate (0=10, 1=20, 2=35, 3=50, 4=70, 5=100, 6=150)
  8080. Return: AX = FFFFh if driver installed for serial mouse
  8081. SeeAlso: AX=246Ch,AX=256Ch/BX=0001h,AX=256Ch/BX=0003h,AX=276Ch
  8082. --------M-33256CBX0003-----------------------
  8083. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET MOUSE PORT (SERIAL MOUSE ONLY)
  8084.     AX = 256Ch
  8085.     BX = 0003h
  8086.     CX = port (1, 2)
  8087. Return: AX = FFFFh if driver installed for serial mouse
  8088. SeeAlso: AX=246Ch,AX=256Ch/BX=0000h,AX=256Ch/BX=0004h,AX=276Ch
  8089. --------M-33256CBX0004-----------------------
  8090. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET MOUSE LOGICAL BUTTONS
  8091.     AX = 256Ch
  8092.     BX = 0004h
  8093.     CX = buttons (2, 3)
  8094. Return: AX = FFFFh if driver installed for serial mouse
  8095. SeeAlso: AX=246Ch,AX=276Ch
  8096. --------M-33266C-----------------------------
  8097. INT 33 - LOGITECH MOUSE - GET VERSION???
  8098.     AX = 266Ch
  8099. Return: BX = 'SS'
  8100.     CH = '4'  major version number
  8101.     CL = '1'  minor version number
  8102. SeeAlso: AX=006Dh
  8103. --------M-33276C-----------------------------
  8104. INT 33 - LOGITECH MOUSE - ??? Tries MMSeries, Baud 2400
  8105.     AX = 276Ch
  8106. SeeAlso: AX=256Ch
  8107. --------M-333000-----------------------------
  8108. INT 33 - Smooth Mouse Driver, PrecisePoint - INSTALLATION CHECK
  8109.     AX = 3000h
  8110. Return: AX = FFFFh if installed
  8111.         BX = version number (BH = major, BL = minor)
  8112. Program: SMD is a programmer's library by Andy Hakim which provides a
  8113.       graphics-style mouse cursor in text mode.  PrecisePoint is an
  8114.       SMD-based TSR which replaces the block mouse cursor in text
  8115.       applications.
  8116. SeeAlso: AX=0000h,AX=3001h,AX=3003h
  8117. --------M-333001-----------------------------
  8118. INT 33 - Smooth Mouse Driver, PrecisePoint - ENABLE SMOOTH MOUSE
  8119.     AX = 3001h
  8120. Return: AX = status (0000h = disabled, 0001h = enabled)
  8121. Note:    SMD remains disabled if running under Desqview or in graphics mode
  8122. SeeAlso: AX=0001h,AX=0002h,AX=3002h
  8123. --------M-333002-----------------------------
  8124. INT 33 - Smooth Mouse Driver, PrecisePoint - DISABLE SMOOTH MOUSE
  8125.     AX = 3002h
  8126. Return: AX = status (0000h = disabled, 0001h = enabled)
  8127. SeeAlso: AX=0001h,AX=0002h,AX=3000h,AX=3001h
  8128. --------M-333003-----------------------------
  8129. INT 33 - Smooth Mouse Driver, PrecisePoint - GET INFORMATION
  8130.     AX = 3003h
  8131.     BL = data structure selector
  8132.         00h Primary Bitmap (used for 25 line mode) (see #2338)
  8133.         01h Secondary Bitmap (used for 43/50 line modes) (see #2338)
  8134.         02h Sacrifice Character Map (see #2339)
  8135.         03h Program Information (see #2340)
  8136. Return: ES:DX -> selected data structure
  8137. SeeAlso: AX=3000h
  8138.  
  8139. Format of Primary/Secondary Bitmap [SMD_BITMAP_STRUCT]:
  8140. Offset    Size    Description    (Table 2338)
  8141.  00h    BYTE    vertical size of bitmap (00h - 10h)
  8142.  01h    BYTE    horizontal size of bitmap (00h - 10h)
  8143.  02h    BYTE    vertical hotspot position (00h - 10h)
  8144.  03h    BYTE    horizontal hotspot position (00h - 10h)
  8145.  04h 16 WORDs    cursor bitmap data
  8146.  14h 16 WORDs    screen bitmap data
  8147.  
  8148. Format of Sacrifice Character Map [SMD_SMAP_STRUCT]:
  8149. Offset    Size    Description    (Table 2339)
  8150.  00h    BYTE    bytes are character values (00h-FFh) used in place of the
  8151.  01h    BYTE    actual character for the corresponding position on the screen
  8152.  02h    BYTE         +--------------+      occupied by part or all of the mouse
  8153.  03h    BYTE         | 0h | 1h | 2h |      cursor
  8154.  04h    BYTE         |----+----+----|
  8155.  05h    BYTE         | 3h | 4h | 5h |
  8156.  06h    BYTE         |----+----+----|
  8157.  07h    BYTE         | 6h | 7h | 8h |
  8158.  08h    BYTE         +--------------+
  8159.  
  8160. Format of Program Information [SMD_INFO_STRUCT]:
  8161. Offset    Size    Description    (Table 2340)
  8162.  00h    WORD    segment of old interrupt 33h handler
  8163.  02h    WORD    offset of old interrupt 33h handler
  8164.  04h    WORD    PSP of SMD
  8165.  06h    BYTE    ENABLE/DISABLE manual setting status
  8166.  07h    BYTE    ENABLE/DISABLE internal usage status
  8167. --------M-333004-----------------------------
  8168. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  8169.     AX = 3004h
  8170. SeeAlso: AX=3000h
  8171. --------M-333005-----------------------------
  8172. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  8173.     AX = 3005h
  8174. SeeAlso: AX=3000h
  8175. --------M-334F00-----------------------------
  8176. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  8177.     AX = 4F00h
  8178. Return: AX = 004Fh if supported
  8179.     BX = ???
  8180.     ES:DI -> ???
  8181. SeeAlso: AX=4F01h
  8182. --------M-334F01-----------------------------
  8183. INT 33 - LOGITECH MOUSE v6.10+ - ???
  8184.     AX = 4F01h
  8185.     ES = ???
  8186. Return: AX = 004Fh if supported
  8187.     ES:DI -> ???
  8188. SeeAlso: AX=4F00h
  8189. --------M-336F00-----------------------------
  8190. INT 33 - Hewlett Packard - HP MOUSE DRIVER INSTALLATION CHECK
  8191.     AX = 6F00h
  8192.     BX <> 4850h
  8193. Return: BX = 4850h ('HP') if mouse driver written by Hewlett Packard
  8194. SeeAlso: INT 10/AX=6F00h,INT 14/AX=6F00h,INT 16/AX=6F00h,INT 17/AX=6F00h
  8195. --------M-338800-----------------------------
  8196. INT 33 U - InfoTrack IMOUSE.COM - UNHOOK MOUSE IRQ
  8197.     AX = 8800h
  8198.     BX <> FFFFh
  8199. Note:    the code is written to expect a subfunction number in AL, but only
  8200.       function 00h has been implemented
  8201. SeeAlso: AX=8800h/BX=FFFFh
  8202. --------M-338800BXFFFF-----------------------
  8203. INT 33 U - InfoTrack IMOUSE.COM - GET ACTIVE IRQ
  8204.     AX = 8800h
  8205.     BX = FFFFh
  8206. Return: BL = number of IRQ being used by the mouse
  8207. SeeAlso: AX=8800h
  8208. --------T-33FFE6-----------------------------
  8209. INT 33 - Switch-It v3.23 - GET ??? PROGRAM
  8210.     AX = FFE6h
  8211.     CX = length of buffer
  8212.     ES:DI -> buffer for program name
  8213. Return: ES:DI buffer filled
  8214. Program: Switch-It is a task switcher supporting up to 100 programs
  8215.       simultaneously by Better Software Technology, Inc.
  8216. --------T-33FFE7-----------------------------
  8217. INT 33 - Switch-It v3.23 - GET ???
  8218.     AX = FFE7h
  8219. Return: AX = ???
  8220. --------T-33FFE8-----------------------------
  8221. INT 33 - Switch-It v3.23 - ???
  8222.     AX = FFE8h
  8223.     CX = length of name including terminating NUL
  8224.     DS:SI -> ASCIZ program pathname
  8225. --------T-33FFE9-----------------------------
  8226. INT 33 - Switch-It v3.23 - SET ???
  8227.     AX = FFE9h
  8228.     BX = ???
  8229. --------T-33FFEA-----------------------------
  8230. INT 33 - Switch-It v3.23 - SET ???
  8231.     AX = FFEAh
  8232.     BL = ???
  8233. --------T-33FFEB-----------------------------
  8234. INT 33 - Switch-It v3.23 - SET ??? FLAG
  8235.     AX = FFEBh
  8236. --------T-33FFEC-----------------------------
  8237. INT 33 - Switch-It v3.23 - SET ???
  8238.     AX = FFECh
  8239.     BL = ???
  8240. --------T-33FFED-----------------------------
  8241. INT 33 - Switch-It v3.23 - GET ???
  8242.     AX = FFEDh
  8243. Return: AX = ??? (0001h)
  8244.     BX = ???
  8245. Program: Switch-It is a task switcher supporting up to 100 programs
  8246.       simultaneously by Better Software Technology, Inc.
  8247. --------T-33FFEE-----------------------------
  8248. INT 33 - Switch-It v3.23 - GET ???
  8249.     AX = FFEEh
  8250. Return: AX = ???
  8251. --------T-33FFEF-----------------------------
  8252. INT 33 - Switch-It v3.23 - GET ???
  8253.     AX = FFEFh
  8254. Return: BX:AX -> ???
  8255. --------T-33FFF0-----------------------------
  8256. INT 33 - Switch-It v3.23 - SET ???
  8257.     AX = FFF0h
  8258.     BL = ???
  8259. --------T-33FFF1-----------------------------
  8260. INT 33 - Switch-It v3.23 - GET CONFIGURATION FILE
  8261.     AX = FFF1h
  8262. Return: BX:AX -> ASCIZ pathname of configuration file
  8263. Program: Switch-It is a task switcher supporting up to 100 programs
  8264.       simultaneously by Better Software Technology, Inc.
  8265. --------T-33FFF2-----------------------------
  8266. INT 33 - Switch-It v3.23 - SET ??? FLAG
  8267.     AX = FFF2h
  8268. Return: AL = 01h
  8269. --------T-33FFF3-----------------------------
  8270. INT 33 - Switch-It v3.23 - GET ???
  8271.     AX = FFF3h
  8272. Return: AX = ???
  8273. --------T-33FFF4-----------------------------
  8274. INT 33 - Switch-It v3.23 - SET ???
  8275.     AX = FFF4h
  8276.     BX = ???
  8277.     CX = ???
  8278. --------T-33FFF5-----------------------------
  8279. INT 33 - Switch-It v3.23 - GET ???
  8280.     AX = FFF5h
  8281. Return: AX = ???
  8282. --------T-33FFF6-----------------------------
  8283. INT 33 - Switch-It v3.23 - GET ???
  8284.     AX = FFF6h
  8285. Return: AX = ???
  8286. --------T-33FFF7-----------------------------
  8287. INT 33 - Switch-It v3.23 - GET ???
  8288.     AX = FFF7h
  8289.     BX = index of ???
  8290. Return: AX = ???
  8291. --------T-33FFF8-----------------------------
  8292. INT 33 - Switch-It v3.23 - ???
  8293.     AX = FFF8h
  8294.     BX = ???
  8295.     CX = length of program name, including terminating NUL
  8296.     DS:SI -> ASCIZ program pathname
  8297. Return: ???
  8298. Program: Switch-It is a task switcher supporting up to 100 programs
  8299.       simultaneously by Better Software Technology, Inc.
  8300. --------T-33FFF9-----------------------------
  8301. INT 33 - Switch-It v3.23 - NOP
  8302.     AX = FFF9h
  8303. --------T-33FFFA-----------------------------
  8304. INT 33 - Switch-It v3.23 - SET ???
  8305.     AX = FFFAh
  8306.     BX = index of program
  8307. SeeAlso: AX=FFFBh,AX=FFFCh
  8308. --------T-33FFFB-----------------------------
  8309. INT 33 - Switch-It v3.23 - GET ???
  8310.     AX = FFFBh
  8311.     BX = index of program
  8312. Return: AX = ??? (0000h or 0001h)
  8313. SeeAlso: AX=FFFAh,AX=FFFCh
  8314. --------T-33FFFC-----------------------------
  8315. INT 33 - Switch-It v3.23 - CLEAR ???
  8316.     AX = FFFCh
  8317.     BX = index of program
  8318. SeeAlso: AX=FFFAh,AX=FFFCh
  8319. --------T-33FFFD-----------------------------
  8320. INT 33 - Switch-It v3.23 - GET MEMORY ADDRESSES???
  8321.     AX = FFFDh
  8322. Return: AX = first available segment???
  8323.     BX = paragraph of top of conventional memory
  8324.     DX = PSP segment of SI.EXE
  8325. --------T-33FFFE-----------------------------
  8326. INT 33 - Switch-It v3.23 - INSTALLATION CHECK
  8327.     AX = FFFEh
  8328. Return: BX = ???
  8329.     DX = 5349h ("SI")
  8330. --------T-33FFFF-----------------------------
  8331. INT 33 - Switch-It v3.23 - ???
  8332.     AX = FFFFh
  8333.     BX = ???
  8334. Program: Switch-It is a task switcher supporting up to 100 programs
  8335.       simultaneously by Better Software Technology, Inc.
  8336. --------r-34---------------------------------
  8337. INT 34 - FLOATING POINT EMULATION - OPCODE D8h
  8338. Desc:    this interrupt is used to emulate floating-point instructions with
  8339.       an opcode of D8h
  8340. Note:    the floating-point emulators in Borland and Microsoft languages and
  8341.       Lahey FORTRAN use this interrupt
  8342. SeeAlso: INT 35,INT 3E
  8343. --------r-35---------------------------------
  8344. INT 35 - FLOATING POINT EMULATION - OPCODE D9h
  8345. Desc:    this interrupt is used to emulate floating-point instructions with
  8346.       an opcode of D9h
  8347. Note:    the floating-point emulators in Borland and Microsoft languages and
  8348.       Lahey FORTRAN use this interrupt
  8349. SeeAlso: INT 34,INT 36
  8350. --------r-36---------------------------------
  8351. INT 36 - FLOATING POINT EMULATION - OPCODE DAh
  8352. Desc:    this interrupt is used to emulate floating-point instructions with
  8353.       an opcode of DAh
  8354. Note:    the floating-point emulators in Borland and Microsoft languages and
  8355.       Lahey FORTRAN use this interrupt
  8356. SeeAlso: INT 35,INT 37
  8357. --------r-37---------------------------------
  8358. INT 37 - FLOATING POINT EMULATION - OPCODE DBh
  8359. Desc:    this interrupt is used to emulate floating-point instructions with
  8360.       an opcode of DBh
  8361. Note:    the floating-point emulators in Borland and Microsoft languages and
  8362.       Lahey FORTRAN use this interrupt
  8363. SeeAlso: INT 36,INT 38
  8364. --------r-38---------------------------------
  8365. INT 38 - FLOATING POINT EMULATION - OPCODE DCh
  8366. Desc:    this interrupt is used to emulate floating-point instructions with
  8367.       an opcode of DCh
  8368. Note:    the floating-point emulators in Borland and Microsoft languages and
  8369.       Lahey FORTRAN use this interrupt
  8370. SeeAlso: INT 37,INT 39
  8371. --------O-38---------------------------------
  8372. INT 38 - PC-MOS/386 v3.0 - API
  8373. Note:    this API was been moved to INT D4h sometime between versions 3.0 and
  8374.       5.01; v3.0 supported at least functions 02h,04h,0703h,10h,11h, and
  8375.       12h
  8376. SeeAlso: INT D4/AH=02h,INT D4/AH=04h,INT D4/AH=07h,INT D4/AH=10h,INT D4/AH=11h
  8377. --------r-39---------------------------------
  8378. INT 39 - FLOATING POINT EMULATION - OPCODE DDh
  8379. Desc:    this interrupt is used to emulate floating-point instructions with
  8380.       an opcode of DDh
  8381. Note:    the floating-point emulators in Borland and Microsoft languages and
  8382.       Lahey FORTRAN use this interrupt
  8383. SeeAlso: INT 38,INT 3A
  8384. --------r-3A---------------------------------
  8385. INT 3A - FLOATING POINT EMULATION - OPCODE DEh
  8386. Desc:    this interrupt is used to emulate floating-point instructions with
  8387.       an opcode of DEh
  8388. Note:    the floating-point emulators in Borland and Microsoft languages and
  8389.       Lahey FORTRAN use this interrupt
  8390. SeeAlso: INT 39,INT 3B
  8391. --------r-3B---------------------------------
  8392. INT 3B - FLOATING POINT EMULATION - OPCODE DFh
  8393. Desc:    this interrupt is used to emulate floating-point instructions with
  8394.       an opcode of DFh
  8395. Note:    the floating-point emulators in Borland and Microsoft languages and
  8396.       Lahey FORTRAN use this interrupt
  8397. SeeAlso: INT 3A,INT 3C
  8398. --------r-3C---------------------------------
  8399. INT 3C - FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE
  8400. Notes:    the floating-point emulators in Borland and Microsoft languages and
  8401.       Lahey FORTRAN use this interrupt
  8402.     the generated code is  CD 3C xy mm ....
  8403.       where xy is a modified ESC instruction and mm is the modR/M byte.
  8404.       The xy byte appears to be encoded as
  8405.         s s 0 1 1 x x x      or    s s 0 0 0 x x x
  8406.       where "ss" specifies the segment override:
  8407.         00 -> DS:
  8408.         01 -> SS:
  8409.         10 -> CS:
  8410.         11 -> ES:
  8411. SeeAlso: INT 3B,INT 3D
  8412. --------r-3D---------------------------------
  8413. INT 3D - FLOATING POINT EMULATION - STANDALONE FWAIT
  8414. Notes:    the floating-point emulators in Borland and Microsoft languages and
  8415.       Lahey FORTRAN use this interrupt
  8416.     this vector is modified but not restored by Direct Access v4.0, and
  8417.       may be left dangling by other programs written with the same version
  8418.       of compiled BASIC
  8419. SeeAlso: INT 3C,INT 3E
  8420. --------r-3E---------------------------------
  8421. INT 3E - FLOATING POINT EMULATION - Borland LANGUAGES "SHORTCUT" CALL
  8422. Notes:    the two bytes following the INT 3E instruction are the subcode
  8423.       (see #2341) and a NOP (90h), except for subcodes DCh and DEh, where
  8424.       the second byte is a register count (01h-08h)
  8425.     this vector is modified but not restored by Direct Access v4.0, and
  8426.       may be left dangling by other programs written with the same version
  8427.       of compiled BASIC
  8428. SeeAlso: INT 3D
  8429.  
  8430. (Table 2341)
  8431. Values for Borland floating-point shortcut subcode:
  8432. Subcode        Function
  8433.  DCh    load 8086 stack with 8087 registers; overwrites the 10*N bytes at the
  8434.       top of the stack prior to the INT 3E with the 8087 register contents
  8435.  DEh    load 8087 registers from top of 8086 stack; ST0 is furthest from top
  8436.       of 8086 stack
  8437.  E0h    round TOS and R1 to single precision, compare, pop twice
  8438.       returns AX=8087 status word, FLAGS=8087 condition bits
  8439.  E2h    round TOS and R1 to double precision, compare, pop twice
  8440.       returns AX=8087 status word, FLAGS=8087 condition bits
  8441.     Note: buggy in TPas5.5, because it sets the 8087 precision control
  8442.       field to the undocumented value 01h; this results in actually
  8443.       rounding to single precision
  8444.  E4h    compare TOS/R1 with two POP's
  8445.       returns FLAGS=8087 condition bits
  8446.  E6h    compare TOS/R1 with POP
  8447.       returns FLAGS=8087 condition bits
  8448.  E8h    FTST (check TOS value)
  8449.       returns FLAGS=8087 condition bits
  8450.  EAh    FXAM (check TOS value)
  8451.       returns AX=8087 status word
  8452.  ECh    sine(ST0)
  8453.  EEh    cosine(ST0)
  8454.  F0h    tangent(ST0)
  8455.  F2h    arctangent(ST0)
  8456.  F4h    ST0 = ln(ST0)
  8457.  F6h    ST0 = log2(ST0)
  8458.  F8h    ST0 = log10(ST0)
  8459.  FAh    ST0 = e**ST0
  8460.  FCh    ST0 = 2**ST0
  8461.  FEh    ST0 = 10**ST0
  8462. --------r-3F---------------------------------
  8463. INT 3F - Overlay manager interrupt (Microsoft LINK.EXE, Borland TLINK VROOMM)
  8464. Notes:    INT 3F is the default, and may be overridden while linking
  8465.     this vector is modified but not restored by Direct Access v4.0, and
  8466.       may be left dangling by other programs written with the same version
  8467.       of compiled BASIC
  8468. SeeAlso: INT FE"OVERLAY"
  8469. --------r-3F---------------------------------
  8470. INT 3F - Microsoft Dynamic Link Library manager
  8471. SeeAlso: INT 21/AH=4Bh
  8472. --------B-40---------------------------------
  8473. INT 40 - DISKETTE - ROM BIOS DISKETTE HANDLER RELOCATED BY HARD DISK BIOS
  8474. SeeAlso: INT 13,INT 47"SuperBIOS",INT 63
  8475. --------h-40---------------------------------
  8476. INT 40 - Z100 - Master 8259 - Parity error or S100 error
  8477. SeeAlso: INT 41"Z100",INT FF"Z100"
  8478. --------O-40---------------------------------
  8479. INT 40 - Acorn BBC Master 512 - "OSFIND" - OPEN FILE
  8480.     AL = operation
  8481.         00h close file
  8482.         40h open file for reading
  8483.         80h open file for writing
  8484.         C0h open file for random access
  8485.     DS:BX -> CR-terminated filename
  8486. Return: AL = file handle (00h if file closed or could not be opened)
  8487. Note:    the Acorn BBC Master 512 is an 80186-based add-on board for the
  8488.       6502-based Master 128 which uses the original CPU as an I/O processor
  8489. SeeAlso: INT 41"Acorn",INT 42"Acorn",INT 43"Acorn",INT 44"Acorn",INT 4C"Acorn"
  8490. --------h-40---------------------------------
  8491. INT 40 - TI Professional PC - IRQ0
  8492. Note:    on the TI Pro, IRQ0 is connected to the same pin on the expansion bus
  8493.       that IBM connects to IRQ2
  8494. SeeAlso: INT 0A"IRQ2",INT 41"TI Professional"
  8495. --------B-41---------------------------------
  8496. INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE
  8497. Notes:    the default parameter table array is located at F000h:E401h in 100%
  8498.       compatible BIOSes; the pointer may be overridden by the hard disk
  8499.       controller's BIOS to support drive formats unknown to the ROM BIOS
  8500.     not used by some PS/2 models
  8501. SeeAlso: #2342,INT 13/AH=09h,INT 1E,INT 46,INT 60"Adaptec",INT C0"AMI"
  8502.  
  8503. Format of fixed disk parameters:
  8504. Offset    Size    Description    (Table 2342)
  8505.  00h    WORD    number of cylinders
  8506.  02h    BYTE    number of heads
  8507.  03h    WORD    starting reduced write current cylinder (XT only, 0 for others)
  8508.  05h    WORD    starting write precompensation cylinder number
  8509.  07h    BYTE    maximum ECC burst length (XT only)
  8510.  08h    BYTE    control byte (see #2343,#2344)
  8511.  09h    BYTE    standard timeout (XT only, 0 for others)
  8512.  0Ah    BYTE    formatting timeout (XT and WD1002 only, 0 for others)
  8513.  0Bh    BYTE    timeout for checking drive (XT and WD1002 only, 0 for others)
  8514.  0Ch    WORD    cylinder number of landing zone (AT and later only)
  8515.  0Eh    BYTE    number of sectors per track (AT and later only)
  8516.  0Fh    BYTE    reserved
  8517. SeeAlso: #0180,#0182
  8518.  
  8519. Bitfields for XT fixed disk control byte:
  8520. Bit(s)    Description    (Table 2343)
  8521.  2-0    drive step speed
  8522.     000  3ms
  8523.     100  200ms
  8524.     101  70ms (default)
  8525.     110  3ms
  8526.     111  3ms
  8527.  5-3    unused
  8528.  6    disable ECC retries
  8529.  7    disable access retries
  8530.  
  8531. Bitfields for AT fixed disk control byte:
  8532. Bit(s)    Description    (Table 2344)
  8533.  0    unused
  8534.  1    reserved (0)  (disable IRQ)
  8535.  2    reserved (0)  (no reset)
  8536.  3    set if more than 8 heads
  8537.  4    always 0
  8538.  5    set if manufacturer's defect map on max cylinder+1  (AT and later only)
  8539.  6    disable ECC retries
  8540.  7    disable access retries
  8541. --------h-41---------------------------------
  8542. INT 41 - Z100 - Master 8259 - Processor Swap
  8543. SeeAlso: INT 40"Z100",INT 42"Z100"
  8544. --------h-41---------------------------------
  8545. INT 41 - TI Professional PC - IRQ1
  8546. Note:    on the TI Pro, IRQ1 is connected to the same pin on the expansion bus
  8547.       that IBM connects to IRQ3
  8548. SeeAlso: INT 0B"IRQ3",INT 40"TI Professional",INT 42"TI Professional"
  8549. --------O-41---------------------------------
  8550. INT 41 - Acorn BBC Master 512 - "OSGBPB" - MULTI-BYTE GET/PUT
  8551.     AL = function
  8552.         01h put bytes sequentially
  8553.         02h put bytes, ignoring sequential pointer
  8554.         03h get bytes sequentially
  8555.         04h get bytes, ignoring sequential pointer
  8556.         05h get media title and boot option
  8557.         06h get current device and directory
  8558.         07h get current library and device
  8559.         08h search directory
  8560.     DS:BX -> control block (see #2345)
  8561. Return: CF clear if successful
  8562.     CF set on error
  8563.     AL = 00h if operation attempted
  8564.     AL unchanged if unsupported function
  8565. SeeAlso: INT 40"Acorn",INT 42"Acorn",INT 43"Acorn"
  8566.  
  8567. Format of BBC Master control block:
  8568. Offset    Size    Description    (Table 2345)
  8569.  00h    BYTE    file handle
  8570.  01h    DWORD    pointer to data in either I/O processor or Tube processor
  8571.  05h    DWORD    number of bytes to be transferred
  8572.  09h    DWORD    transfer address
  8573. --------G-410000-----------------------------
  8574. INT 41 CPU - MS Windows debugging kernel - OUTPUT CHARACTER FOR USER
  8575.     AX = 0000h
  8576.     DS:DX -> character
  8577. Note:    the kernel calls this function when it wants the user program to
  8578.       output a character
  8579. SeeAlso: AX=0001h
  8580. --------G-410001-----------------------------
  8581. INT 41 CPU - MS Windows debugging kernel - INPUT CHARACTER
  8582.     AX = 0001h
  8583. Return: AL = character
  8584. Note:    the kernel calls this function when it needs to input a character
  8585. SeeAlso: AX=0000h
  8586. --------G-41000D-----------------------------
  8587. INT 41 CPU - MS Windows debugging kernel - TASK GOING OUT
  8588.     AX = 000Dh
  8589. SeeAlso: AX=000Eh
  8590. --------G-41000E-----------------------------
  8591. INT 41 CPU - MS Windows debugging kernel - TASK COMING IN
  8592.     AX = 000Eh
  8593. SeeAlso: AX=000Dh
  8594. --------G-410012-----------------------------
  8595. INT 41 CPU - MS Windows debugging kernel - "OutputDebugString"
  8596.     AX = 0012h
  8597.     DS:SI -> string (Windows 3.0)
  8598.     ES:SI -> string (Windows 3.1)
  8599. Return: nothing???
  8600. Note:    this function is called by the kernel when it wants to output a
  8601.       string through the debugger
  8602. SeeAlso: AX=0050h,INT 68/AH=47h
  8603. --------G-41004F-----------------------------
  8604. INT 41 CPU - MS Windows debugging kernel - DEBUGGER INSTALLATION CHECK
  8605.     AX = 004Fh
  8606. Return: AX = F386h if debugger is present
  8607. SeeAlso: INT 68/AX=4400h
  8608. --------G-410050-----------------------------
  8609. INT 41 P - MS Windows debugging kernel - "DefineDebugSegment"
  8610.     AX = 0050h
  8611.     BX = segment number in executable (0-based)
  8612.     CX = selector
  8613.     DX = instance handle
  8614.     SI = segment flags (0=code, 1=data)
  8615.     ES:DI -> module name of owner
  8616. Return: ???
  8617. SeeAlso: AX=0012h,AX=004Fh
  8618. --------G-410051-----------------------------
  8619. INT 41 CPU - MS Windows debugging kernel - MOVE SEGMENT
  8620.     AX = 0051h
  8621.     ???
  8622. Return: ???
  8623. SeeAlso: AX=0050h,AX=0052h
  8624. --------G-410052-----------------------------
  8625. INT 41 CPU - MS Windows debugging kernel - FREE SEGMENT
  8626.     AX = 0052h
  8627.     BX = freed selector
  8628. SeeAlso: AX=0050h,AX=0051h,AX=005Ch
  8629. --------G-410059-----------------------------
  8630. INT 41 CPU - MS Windows debugging kernel - LOAD TASK
  8631.     AX = 0059h
  8632.     ???:BX = CS:IP of new task's starting point
  8633. --------G-41005C-----------------------------
  8634. INT 41 CPU - MS Windows debugging kernel - FREE INITIAL SEGMENT
  8635.     AX = 005Ch
  8636.     BX = freed selector
  8637. Note:    called only when KERNEL starts, once for CS and once for the DS alias
  8638.       to CS
  8639. SeeAlso: AX=0052h
  8640. --------G-410060-----------------------------
  8641. INT 41 CPU - MS Windows debugging kernel -  END OF SEGMENT LOAD
  8642.     AX = 0060h
  8643.     ???
  8644. Return: ???
  8645. SeeAlso: AX=0061h
  8646. --------G-410061-----------------------------
  8647. INT 41 CPU - MS Windows debugging kernel - END OF SEGMENT DISCARD
  8648.     AX = 0061h
  8649.     ???
  8650. Return: ???
  8651. SeeAlso: AX=0060h
  8652. --------G-410062-----------------------------
  8653. INT 41 CPU - MS Windows debugging kernel - APPLICATION TERMINATING
  8654.     AX = 0062h
  8655. STACK:    BYTE    exit code
  8656. Return: ???
  8657.     STACK unchanged???
  8658. SeeAlso: AX=0064h
  8659. --------G-410063-----------------------------
  8660. INT 41 CPU - MS Windows debugging kernel - ASYNCHRONOUS STOP (Ctrl-Alt-SysReq)
  8661.     AX = 0063h
  8662. --------G-410064-----------------------------
  8663. INT 41 CPU - MS Windows debugging kernel - DLL LOADED
  8664.     AX = 0064h
  8665.     CX:BX = DLL entry point CS:IP
  8666.     SI = module handle
  8667. SeeAlso: AX=0062h,AX=0065h
  8668. --------G-410065-----------------------------
  8669. INT 41 CPU - MS Windows debugging kernel - MODULE REMOVED
  8670.     AX = 0065h
  8671.     ES = module handle
  8672. SeeAlso: AX=0064h
  8673. --------V-42---------------------------------
  8674. INT 42 - VIDEO - RELOCATED DEFAULT INT 10 VIDEO SERVICES (EGA,VGA)
  8675. Desc:    contains the address of the original INT 10 handler which an EGA+
  8676.       video adapter replaces with its own on-board BIOS code
  8677. SeeAlso: INT 10
  8678. Note:    not used by PS/2 built-in VGA or XGA
  8679. --------h-42---------------------------------
  8680. INT 42 - Z100 - Master 8259 - Timer
  8681. SeeAlso: INT 41"Z100",INT 43"Z100"
  8682. --------h-42---------------------------------
  8683. INT 42 - TI Professional PC - IRQ2
  8684. Note:    on the TI Pro, IRQ0 is connected to the same pin on the expansion bus
  8685.       that IBM connects to IRQ4
  8686. SeeAlso: INT 0C"IRQ4",INT 41"TI Professional",INT 43"TI Professional"
  8687. --------b-42---------------------------------
  8688. INT 42 - Western Digital WD1002 SuperBIOS - INT 40 CASCADE
  8689. Note:    if the second WD1002 controller in the system finds INT 40 already in
  8690.       use, it uses this vector to cascade to the first controller's BIOS
  8691. SeeAlso: INT 40"DISKETTE",INT 47"SuperBIOS"
  8692. --------O-42---------------------------------
  8693. INT 42 - Acorn BBC Master 512 - "OSBPUT" - WRITE SINGLE BYTE TO FILE
  8694.     AL = byte to be written
  8695.     BH = file handle
  8696. Return: flags destroyed
  8697. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  8698. --------V-427500-----------------------------
  8699. INT 42 U - Toshiba laptops - ???
  8700.     AX = 7500h
  8701.     BL = ??? (00h or 01h)
  8702. Return: ???
  8703. Note:    used by Toshiba utility VCHAD.EXE
  8704. SeeAlso: AX=7501h,AX=7503h
  8705. --------V-427501-----------------------------
  8706. INT 42 U - Toshiba laptop - GET ??? DATA
  8707.     AX = 7501h
  8708.     DS:DI -> data area to be filled ???
  8709. Return: area filled with data ???
  8710. Note:    used by Toshiba utility VCHAD.EXE
  8711. SeeAlso: AX=7500h,AX=7502h,AX=7503h
  8712. --------V-427502-----------------------------
  8713. INT 42 U - Toshiba laptops - SET ??? DATA
  8714.     AX = 7502h
  8715.     DS:DI -> data area ???
  8716. Return: ???
  8717. Note:    used by Toshiba utility VCHAD.EXE
  8718. SeeAlso: AX=7501h,AX=7503h
  8719. --------V-427503-----------------------------
  8720. INT 42 - Toshiba laptops - GET DISPLAY STATUS
  8721.     AX = 7503h
  8722. Return: AX = 7575h if supported
  8723.     CX = 0001h if supported
  8724.     BH = display type (00h color, 03h monochrome)
  8725.     BL = display state
  8726.         01h internal LCD display is active
  8727.         02h external VGA display is active
  8728.         03h both displays active / DeskStation display mode enabled
  8729.         (not possible on all machines)
  8730. Note:    used by VCHAD.EXE and supported by all Toshiba VGA laptops until about
  8731.       1994 (string "TOSHIBA " at F000:E010h should be checked before call)
  8732.     no longer supported by T21xx series, use INT 10/AX=5F50h instead
  8733.     INT 42 normally points to F000:F065h but may be redirected by QEMM386
  8734. SeeAlso: AX=7500h,AX=7504h,INT 10/AX=5F50h,INT 15/AH=C0h
  8735. --------V-427504-----------------------------
  8736. INT 42 U - Toshiba laptops - ???
  8737.     AX = 7504h
  8738.     BL = ???
  8739. Return: BH = ???
  8740. Note:    used by Toshiba utility VCHAD.EXE
  8741. SeeAlso: AX=7500h,AX=7503h
  8742. --------V-43---------------------------------
  8743. INT 43 - VIDEO DATA - CHARACTER TABLE (EGA,MCGA,VGA)
  8744. Desc:    points at graphics data for characters 00h-7Fh of the current font
  8745.       in 8x8 dot modes, graphics data for all characters in 8x14 and 8x16
  8746.       modes
  8747. Note:    this is not a callable vector!
  8748. SeeAlso: INT 06"no-name",INT 1F,INT 44"VIDEO"
  8749. --------h-43---------------------------------
  8750. INT 43 - Z100 - Master 8259 - Slave 8259 input
  8751. Note:    slave runs in special fully nested mode
  8752. SeeAlso: INT 42"Z100",INT 44"Z100"
  8753. --------h-43---------------------------------
  8754. INT 43 - TI Professional PC - IRQ3 - TIMER1 25ms INTERVAL INTERRUPT
  8755. SeeAlso: INT 0B"IRQ3",INT 42"TI Professional",INT 44"TI Professional"
  8756. SeeAlso: INT 58"TI Professional"
  8757. --------O-43---------------------------------
  8758. INT 43 - Acorn BBC Master 512 - "OSBGET" - READ SINGLE BYTE FROM FILE
  8759.     BH = file handle
  8760. Return: CF clear if successful
  8761.         AL = byte read from file
  8762.     CF set on error
  8763. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 42"Acorn",INT 46"Acorn"
  8764. --------V-44---------------------------------
  8765. INT 44 - VIDEO DATA - ROM BIOS CHARACTER FONT, CHARACTERS 00h-7Fh (PCjr)
  8766. Desc:    this vector points at graphics data for current character font
  8767. SeeAlso: INT 1F,INT 43"VIDEO"
  8768. --------N-44---------------------------------
  8769. INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
  8770. --------I-44---------------------------------
  8771. INT 44 - IBM 3270-PC High Level Language API
  8772.     DS:SI -> parameter control block
  8773. --------h-44---------------------------------
  8774. INT 44 - Z100 - Master 8259 - Serial A
  8775. SeeAlso: INT 43"Z100",INT 45"Z100"
  8776. --------h-44---------------------------------
  8777. INT 44 - TI Professional PC - IRQ4
  8778. Note:    on the TI Pro, IRQ4 is connected to the same pin on the expansion bus
  8779.       that IBM connects to IRQ5
  8780. SeeAlso: INT 0D"IRQ5",INT 43"TI Professional",INT 45"TI Professional"
  8781. --------v-44---------------------------------
  8782. INT 44 - VIRUS - "Lehigh" - ORIGINAL INT 21h VECTOR
  8783. SeeAlso: INT 32"VIRUS",INT 60"VIRUS",INT 70"VIRUS",INT 9E"VIRUS"
  8784. --------O-4400-------------------------------
  8785. INT 44 - Acorn BBC Master 512 - "OSARGS" - GET/SET FILE PARAMS FOR OPEN FILE
  8786.     AH = 00h
  8787.     AL = function
  8788.         00h get current filing system
  8789.         Return: AL = filing system (see #2346)
  8790.         01h get address of commandline tail
  8791.         Return: BX buffer filled with address of command tail in I/O
  8792.                   processor address space (use INT 4A/AL=05h to
  8793.                   retrieve)
  8794.         FFh flush all files onto secondary storage
  8795.     BX -> 4-byte data buffer
  8796. Note:    the commandline tail is terminated with a carriage return (0Dh)
  8797. SeeAlso: INT 40"Acorn",INT 45"Acorn"
  8798.  
  8799. (Table 2346)
  8800. Values for BBC Master filing system:
  8801.  00h    none
  8802.  01h    1200 bps cassette
  8803.  02h    300 bps cassette
  8804.  03h    ROM FS
  8805.  04h    DFS
  8806.  05h    ANFS/NFS
  8807.  06h    TFS
  8808.  08h    ADFS
  8809. --------O-44---------------------------------
  8810. INT 44 - Acorn BBC Master 512 - "OSARGS" - GET/SET FILE PARAMS FOR OPEN FILE
  8811.     AH = nonzero file handle
  8812.     AL = function
  8813.         00h get sequential pointer for file
  8814.         01h set sequential pointer for file
  8815.         02h get length of file
  8816.     BX -> 4-byte data buffer
  8817. Return: BX buffer updated if appropriate
  8818. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 44/AH=00h,INT 45"Acorn",INT 4A"Acorn"
  8819. --------h-45---------------------------------
  8820. INT 45 - Z100 - Master 8259 - Serial B
  8821. SeeAlso: INT 44"Z100",INT 46"Z100"
  8822. --------h-45---------------------------------
  8823. INT 45 - TI Professional PC - IRQ5
  8824. Note:    on the TI Pro, IRQ5 is connected to the same pin on the expansion bus
  8825.       that IBM connects to IRQ6
  8826. SeeAlso: INT 0E"IRQ6",INT 44"TI Professional",INT 46"TI Professional"
  8827. --------O-45---------------------------------
  8828. INT 45 - Acorn BBC Master 512 - "OSFILE" - READ/WRITE FILE OR DIRECTORY INFO
  8829.     AL = function
  8830.         00h save block of memory as file
  8831.         01h update directory entry for existing file
  8832.         02h set load address for existing file
  8833.         03h set execution address for existing file
  8834.         04h set attributes for existing file
  8835.         05h read directory
  8836.         06h delete file
  8837.         FFh load file
  8838.     DS:BX -> control block (see #2347)
  8839. Return: FLAGS destroyed
  8840.     AL = file type
  8841.         00h not found
  8842.         01h file found
  8843.         02h directory found
  8844.         FFh protected file
  8845. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 44"Acorn",INT 46"Acorn"
  8846.  
  8847. Format of BBC Master control block:
  8848. Offset    Size    Description    (Table 2347)
  8849.  00h    WORD    address of CR-terminated filename
  8850.  02h    DWORD    load address of file
  8851.  06h    DWORD    execution address of file
  8852.  0Ah    DWORD    start address of data to save
  8853.  0Eh    DWORD    end address of data to save, or file attributes
  8854.         file attributes in low byte (see #2348)
  8855.         other three bytes are filing-system specific file attributes
  8856.  
  8857. Bitfields for BBC Master file attributes:
  8858. Bit(s)    Description    (Table 2348)
  8859.  0    no owner read access
  8860.  1    no owner write access
  8861.  2    not executable by owner
  8862.  3    not deletable by owner
  8863.  4    no public read access
  8864.  5    no public write access
  8865.  6    not executable with public access
  8866.  7    not deletable with public access
  8867. --------B-46---------------------------------
  8868. INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE
  8869. Note:    not used by some PS/2 models
  8870. SeeAlso: INT 13/AH=09h,INT 41,INT 60"Adaptec",INT C0"AMI"
  8871. --------h-46---------------------------------
  8872. INT 46 - Z100 - Master 8259 - Keyboard, Retrace, and Light Pen
  8873. SeeAlso: INT 45"Z100",INT 47"Z100"
  8874. --------h-46---------------------------------
  8875. INT 46 - TI Professional PC - IRQ6
  8876. Note:    on the TI Pro, IRQ6 is connected to the same pin on the expansion bus
  8877.       that IBM connects to IRQ7
  8878. SeeAlso: INT 0F"IRQ7",INT 45"TI Professional",INT 47"TI Professional"
  8879. --------O-46---------------------------------
  8880. INT 46 - Acorn BBC Master 512 - "OSRDCH" - GET CHARACTER FROM CUR INPUT STREAM
  8881. Return: CF clear if successful
  8882.         AL = character read
  8883.     CF set on error
  8884.         AL = error code
  8885. SeeAlso: INT 40"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  8886. --------h-47---------------------------------
  8887. INT 47 - Z100 - Master 8259 - Printer
  8888. SeeAlso: INT 46"Z100",INT 48"Z100"
  8889. --------h-47---------------------------------
  8890. INT 47 - TI Professional PC - IRQ7 - KEYBOARD USART
  8891. SeeAlso: INT 09"IRQ1",INT 46"TI Professional"
  8892. --------O-47---------------------------------
  8893. INT 47 - Acorn BBC Master 512 - "OSWRCH" - WRITE CHARACTER TO CUR OUTPUT STREAM
  8894.     AL = character to be written
  8895. Return: FLAGS destroyed
  8896. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 49"Acorn"
  8897. --------b-47---------------------------------
  8898. INT 47 - Western Digital WD1002-27X SuperBIOS - INT 40 CASCADE
  8899. Desc:    used by the second WD1002-27X controller to cascade to the first
  8900.       controller's INT 40
  8901. SeeAlso: INT 40"DISKETTE",INT 42"SuperBIOS",INT 48"SuperBIOS"
  8902. ----------478000-----------------------------
  8903. INT 47 - SQL Base - DATABASE ENGINE API
  8904.     AX = 8000h
  8905.     DS:BX -> parameter block, first word is function number (see #2349)
  8906. Program: SQL Base is a network-oriented database engine by Gupta Technologies
  8907. SeeAlso: AX=8001h
  8908.  
  8909. (Table 2349)
  8910. Values for SQL Base function number:
  8911.  01h    "SQLFINI" initalialize application's use of the database
  8912.  02h    "SQLFDON" application is done using the database
  8913.  03h    "SQLFCON" connect to a cursor/database
  8914.  04h    "SQLFDIS" disconnect from a cursor/database
  8915.  05h    "SQLFCOM" compile a SQL command
  8916.  06h    "SQLFEXE" execute a SQL command
  8917.  07h    "SQLFCEX" compile and execute a SQL command
  8918.  08h    "SQLFCMT" commit a transaction to the database
  8919.  09h    "SQLFDES" describe the items of a SELECT statement
  8920.  0Ah    "SQLFGFI" get fetch information
  8921.  0Bh    "SQLFFBK" fetch previous result row from SELECT statement
  8922.  0Ch    "SQLFFET" fetch next result row from SELECT statement
  8923.  0Dh    "SQLFEFB" enable fetch backwards
  8924.  0Eh    "SQLFPRS" position in result set
  8925.  0Fh    "SQLFURS" undo result set
  8926.  10h    "SQLFNBV" get number of bind variables
  8927.  11h    "SQLFBND" bind data variables
  8928.  12h    "SQLFBNN" bind numerics
  8929.  13h    "SQLFBLN" bind long number
  8930.  14h    "SQLFBLD" bind long data variables
  8931.  15h    "SQLFSRS" start restriction set processing
  8932.  16h    "SQLFRRS" restart restriction set processing
  8933.  17h    "SQLFCRS" close restriction set
  8934.  18h    "SQLFDRS" drop restriction set
  8935.  19h    "SQLFARF" apply Roll Forward journal
  8936.  1Ah    "SQLFERF" end Roll Forward journal
  8937.  1Bh    "SQLFSRF" start Roll Forward journal
  8938.  1Ch    "SQLFSTO" store a compiled SQL command
  8939.  1Dh    "SQLFRET" retrieve a compiled SQL command
  8940.  1Eh    "SQLFDST" drop a stored command
  8941.  1Fh    "SQLFCTY" get command type
  8942.  20h    "SQLFEPO" get error position
  8943.  21h    "SQLFGNR" get number of rows
  8944.  22h    "SQLFNSI" get number of select items
  8945.  23h    "SQLFRBF" get Roll Back flag
  8946.  24h    "SQLFRCD" get return code
  8947.  25h    "SQLFROW" get number of ROWs
  8948.  26h    "SQLFSCN" set cursor name
  8949.  27h    "SQLFSIL" set isolation level
  8950.  28h    "SQLFSLP" set log parameters
  8951.  29h    "SQLFSSB" set select buffer
  8952.  2Ah    "SQLFSSS" set sort space
  8953.  2Bh    "SQLFRLO" read long
  8954.  2Ch    "SQLFWLO" write long
  8955.  2Dh    "SQLFLSK" long seek
  8956.  2Eh    "SQLFGLS" get long size
  8957.  2Fh    "SQLFELO" end long operation
  8958.  30h    "SQLFRBK" roll back a transaction from the database
  8959.  31h    "SQLFERR" error message
  8960.  32h    "SQLFCPY" copy
  8961.  33h    "SQLFR01" reserved
  8962.  34h    "SQLFSYS" system
  8963.  35h    "SQLFSTA" statistics
  8964.  36h    "SQLFR02" reserved
  8965.  37h    "SQLFXAD" extra add
  8966.  38h    "SQLFXCN" extra character to number
  8967.  39h    "SQLFXDA" extra date add
  8968.  3Ah    "SQLFXDP" extra date picture
  8969.  3Bh    "SQLFXDV" extra divide
  8970.  3Ch    "SQLFXML" extra multiply
  8971.  3Dh    "SQLFXNP" extra number picture
  8972.  3Eh    "SQLFXPD" extra picture date
  8973.  3Fh    "SQLFXSB" extra subtract
  8974.  40h    "SQLFINS" install database
  8975.  41h    "SQLFDIN" deinstall database
  8976.  42h    "SQLFDIR" directory of databases
  8977.  43h    "SQLFTIO" timeout
  8978.  44h    "SQLFFQN" get fully qualified column name
  8979.  45h    "SQLFEXP" explain execution plan
  8980.  46h    "SQLFFER" get full error
  8981.  47h    "SQLFBKP" begin online backup
  8982.  48h    "SQLFRDC" read backup data chunk
  8983.  49h    "SQLFEBK" end backup
  8984.  4Ah    "SQLFRES" begin restore from backup
  8985.  4Bh    "SQLFWDC" write backup data chunk for restore
  8986.  4Ch    "SQLFRRD" recover restored database to consistent state
  8987.  4Dh    "SQLFERS" end restore
  8988.  4Eh    "SQLFNRR" return number of result set rows
  8989.  4Fh    "SQLFSTR" start restriction mode
  8990.  50h    "SQLFSPR" stop restriction mode
  8991.  51h    "SQLFCNC" connect 2
  8992.  52h    "SQLFCNR" connect with no recovery
  8993.  53h    "SQLFOMS" set output message size
  8994.  54h    "SQLFIMS" set input message size
  8995.  55h    "SQLFSCP" set cache pages
  8996.  56h    "SQLFDSC" describe items of a SELECT statement (external)
  8997.  57h    "SQLFLAB" get label info for items in SELECT statement
  8998.  58h    "SQLFCBV" clear bind variables
  8999.  59h    "SQLFGET" get database information
  9000.  5Ah    "SQLFSET" set database information
  9001.  5Bh    "SQLFTEC" translate error code
  9002. ----------478001-----------------------------
  9003. INT 47 - SQL Base - GET VERSION NUMBER
  9004.     AX = 8001h
  9005. Return: ???
  9006. Program: SQL Base is a network-oriented database engine by Gupta Technologies
  9007. SeeAlso: AX=8000h
  9008. --------B-48---------------------------------
  9009. INT 48 - KEYBOARD - CORDLESS KEYBOARD TRANSLATION (PCjr)
  9010. SeeAlso: INT 49"PCjr"
  9011. --------h-48---------------------------------
  9012. INT 48 - Z100 - Slave 8259 - S100 vectored line 0
  9013. SeeAlso: INT 47"Z100",INT 49"Z100"
  9014. --------N-48---------------------------------
  9015. INT 48 - Watstar PC Network data pointer 1
  9016. SeeAlso: INT 49"Watstar"
  9017. --------b-48---------------------------------
  9018. INT 48 - TI Professional PC - SPEAKER DEVICE SERVICE ROUTINE
  9019.     no details available
  9020. SeeAlso: INT 40"TI Professional",INT 49"TI Professional"
  9021. SeeAlso: INT 4A"TI Professional",INT 4C"TI Professional",INT 4D/AH=00h
  9022. --------O-48---------------------------------
  9023. INT 48 - Acorn BBC Master 512 - "OSNEWL" - SEND NEWLINE TO OUTPUT STREAM
  9024. Return: FLAGS destroyed
  9025. Note:    writes a carriage return (0Dh) followed by a linefeed (0Ah)
  9026. SeeAlso: INT 40"Acorn",INT 47"Acorn",INT 49"Acorn"
  9027. --------b-48---------------------------------
  9028. INT 48 - Western Digital WD1002-27X SuperBIOS - DRIVE DATA (NOT A VECTOR!)
  9029. Note:    the second WD1002-27X controller in a system uses the low byte to
  9030.       store the number of drives controlled by the second controller,
  9031.       and the high word for temporary storage during track recalculation;
  9032.       the first controller uses offsets 74h-77h in the BIOS data area
  9033.       (see MEMORY.LST) to store data
  9034. SeeAlso: INT 47"SuperBIOS"
  9035. --------V-48---------------------------------
  9036. INT 48 U - Compaq UILIB.EXE - API
  9037.     AX = function (see #2350)
  9038.     BX = call type (0002h) (see #2351)
  9039.     ???
  9040. Return: ???
  9041. Note:    returns AX=FFFFh if 1000h<=AX<=2000h and AX is not one of the functions
  9042.       listed below
  9043. SeeAlso: AX=1A70h
  9044.  
  9045. (Table 2350)
  9046. Values for valid UILIB function number:
  9047.  1000h    1160h    12D0h    1430h    1570h    1680h    17F0h    1920h    1A90h
  9048.  1010h    1170h    12E0h    1440h    1578h    1690h    1800h    1930h    1AA0h
  9049.  1020h    1180h    12F0h    1450h    1580h    16A0h    1810h    1940h
  9050.  1030h    1190h    1300h    1460h    1590h    16B0h    1820h    1950h
  9051.  1040h    11A0h    1310h    1470h    1594h    16C0h    1830h    1960h
  9052.  1050h    11B0h    1320h    1480h    1598h    16D0h    1840h    1970h
  9053.  1060h    11C0h    1330h    1490h    15A0h    16E0h    1848h    1980h
  9054.  1070h    11D0h    1340h    14A0h    15B0h    16F0h    1850h    1990h
  9055.  1080h    11E0h    1350h    14B0h    15C0h    1700h    1860h    19A0h
  9056.  1090h    11F0h    1360h    14B8h    15D0h    1710h    1870h    19B0h
  9057.  1095h    1200h    1370h    14BBh    15D4h    1720h    1878h    19C0h
  9058.  1098h    1210h    1380h    14C0h    15D8h    1730h    1880h    19D0h
  9059.  10A0h    1220h    1390h    14D0h    15E0h    1735h    1890h    19E0h
  9060.  10C0h    1230h    13A0h    14E0h    15F0h    1740h    1898h    19F0h
  9061.  10D0h    1240h    13B0h    14F0h    1600h    1750h    18A0h    1A00h
  9062.  10E0h    1250h    13B8h    1500h    1610h    1770h    18B0h    1A10h
  9063.  10F0h    1260h    13C0h    1508h    1620h    1780h    18C0h    1A20h
  9064.  1100h    1270h    13D0h    1510h    1630h    1790h    18D0h    1A30h
  9065.  1110h    1280h    13E0h    1520h    1640h    17A0h    18E0h    1A40h
  9066.  1120h    1290h    13F0h    1530h    1650h    17B0h    18F0h    1A50h
  9067.  1130h    12A0h    1400h    1540h    1660h    17C0h    1900h    1A60h
  9068.  1140h    12B0h    1410h    1550h    1664h    17D0h    1909h    1A70h
  9069.  1150h    12C0h    1420h    1560h    1670h    17E0h    1910h    1A80h
  9070. --------V-481A70-----------------------------
  9071. INT 48 U - Compaq UILIB.EXE - INSTALLATION CHECK
  9072.     AX = 1A70h
  9073.     BX = call type (see #2351)
  9074. Return: CX = 5649h ('VI') if installed
  9075.     DX = 4557h ('EW') if installed
  9076.         AX = version??? (0106h)
  9077.  
  9078. (Table 2351)
  9079. Values for UILIB call type:
  9080.  0000h    near
  9081.  0001h    far
  9082.  0002h    INT (only valid call type when using INT 48)
  9083.  0003h    near
  9084. --------B-49---------------------------------
  9085. INT 49 - SYSTEM DATA - NON-KEYBOARD SCAN-CODE TRANSLATION TABLE (PCjr)
  9086. SeeAlso: #2352,INT 48"PCjr"
  9087.  
  9088. Format of PCjr scan-code translation table:
  9089. Offset    Size    Description    (Table 2352)
  9090.  00h    BYTE    number of non-keyboard scancodes in the table
  9091.  01h  N WORDs    high byte 00h (NUL) byte scancode with low order byte
  9092.           representing the scancode mapped values relative to their
  9093.           input values within the range of 56h through 7Eh
  9094. --------h-49---------------------------------
  9095. INT 49 - Z100 - Slave 8259 - S100 vectored line 1
  9096. SeeAlso: INT 48"Z100",INT 4A"Z100"
  9097. --------V-49---------------------------------
  9098. INT 49 - TI Professional PC - CRT DEVICE SERVICE ROUTINE
  9099.     apparently provides direct video display on the TI Professional PC
  9100. SeeAlso: INT 40"TI Professional",INT 48"TI Professional"
  9101. SeeAlso: INT 4A"TI Professional",INT 4B"TI Professional",INT 4D/AH=00h
  9102. SeeAlso: INT 57"TI Professional"
  9103. --------N-49---------------------------------
  9104. INT 49 - Watstar PC Network data pointer 2
  9105. SeeAlso: INT 48"Watstar"
  9106. --------O-49---------------------------------
  9107. INT 49 - Acorn BBC Master 512 - "OSASCI" - WRITE CHARACTER TO CUR OUTPUT STREAM
  9108.     AL = character to be written
  9109. Return: FLAGS destroyed
  9110. Note:    converts carriage return (0Dh) into CRLF sequence (0Dh 0Ah)
  9111. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 47"Acorn",INT 48"Acorn"
  9112. --------a-490001-----------------------------
  9113. INT 49 - MAGic v1.16+ - TURN ON MAGNIFICATION
  9114.     AX = 0001h
  9115. Return: AX = status (see #2353)
  9116.     BX,CX,DX destroyed
  9117. Program: MAGic (MAGnification In Color) is a TSR by Microsystems Software, Inc.
  9118.       providing 2x2 text and graphics magnification on VGA, XGA, and SVGA
  9119. Note:    INT 49 is the default, but may be overridden on the commandline.  The
  9120.       actual interrupt in use may be found by searching for the signature
  9121.       "MAGic" or "xMAGic" (for the deluxe version) immediately preceding
  9122.       the interrupt handler (this is also the installation check).    MAGic
  9123.       uses CodeRunneR, which places the signature "RT" at offset 0000h in
  9124.       the interrupt handler's segment, followed by MAGic's TSR ID of
  9125.       "VMAG".
  9126. SeeAlso: AX=0002h,AX=0003h,AX=0004h,AX=0008h
  9127. Index:    installation check;MAGic
  9128.  
  9129. (Table 2353)
  9130. Values for MAGic status:
  9131.  0000h    cannot magnify current video mode
  9132.  0002h    magnified (text mode)
  9133.  0003h    magnified (graphics mode)
  9134.  FFFDh    function works only in magnified mode
  9135.  FFFFh    MAGic busy, retry later
  9136. --------a-490002-----------------------------
  9137. INT 49 - MAGic v1.16+ - TURN OFF MAGNIFICATION
  9138.     AX = 0002h
  9139. Return: AX = status (see #2353)
  9140.     BX,CX,DX destroyed
  9141. SeeAlso: AX=0001h
  9142. --------a-490003-----------------------------
  9143. INT 49 - MAGic v1.16+ - SHIFT MAGNIFIED WINDOW TO INCLUDE SPECIFIED LOCATION
  9144.     AX = 0003h
  9145.     BX = vertical position (character row [text] or pixel row [graphics])
  9146.     DX = horizontal position (char column [text] or 8-pixel units [gr])
  9147. Return: AX = status
  9148.         0000h successful
  9149.         FFFFh MAGic busy, retry later
  9150.     BX,CX,DX destroyed
  9151. Note:    window is not moved if the position is inside the current window
  9152. SeeAlso: AX=0001h,AX=0004h,AX=0005h
  9153. --------a-490004-----------------------------
  9154. INT 49 - MAGic v1.16+ - REPOSITION MAGNIFIED WINDOW
  9155.     AX = 0004h
  9156.     BX = vertical position of upper left corner
  9157.     DX = horizontal position
  9158. Return: AX = status (see AX=0003h)
  9159.     BX,CX,DX destroyed
  9160. SeeAlso: AX=0001h,AX=0003h,AX=0005h
  9161. --------a-490005-----------------------------
  9162. INT 49 - MAGic v1.16+ - GET POSITION OF MAGNIFIED WINDOW
  9163.     AX = 0005h
  9164. Return: AX = status
  9165.         0000h successful
  9166.         BX = vertical position (char row or pixel row)
  9167.         DX = horizontal position (char column or 8-pixel units)
  9168.         FFFFh MAGic busy, retry later
  9169.         BX,DX destroyed
  9170.     CX destroyed
  9171. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0006h,AX=0007h
  9172. --------a-490006-----------------------------
  9173. INT 49 - MAGic v1.16+ - GET SIZE OF FULL SCREEN
  9174.     AX = 0006h
  9175. Return: AX = status
  9176.         0000h successful
  9177.         BX = vertical size (char rows or pixel rows)
  9178.         DX = horizontal size (char cols or 8-pixel units)
  9179.         FFFFh MAGic busy, retry later
  9180.         BX,DX destroyed
  9181.     CX destroyed
  9182. SeeAlso: AX=0001h,AX=0005h,AX=0007h
  9183. --------a-490007-----------------------------
  9184. INT 49 - MAGic v1.16+ - GET SIZE OF MAGNIFICATION WINDOW
  9185.     AX = 0007h
  9186. Return: AX = status
  9187.         0000h successful
  9188.         BX = vertical size (char rows or pixel rows)
  9189.         DX = horizontal size (char cols or 8-pixel units)
  9190.         FFFEh invalid function
  9191.         FFFFh MAGic busy, retry later
  9192.         BX,DX destroyed
  9193.     CX destroyed
  9194. BUG:    in v1.16 and v1.17, this function is not recognized as valid, but
  9195.       AX=0000h is accepted and will branch into hyperspace
  9196. SeeAlso: AX=0001h,AX=0006h
  9197. --------a-490008-----------------------------
  9198. INT 49 - MAGic v1.23+ - SET TEXT MODE MAGNIFICATION SIZE
  9199.     AX = 0008h
  9200.     BX = scaling factor (01h=1.4 times, 02h, 04h, 06h, 08h, 09h=12 times)
  9201. Return: AX = status
  9202.         0000h successful
  9203.         FFFBh scaling factor only available in MAGic Deluxe
  9204.         FFFCh already in magnified state, can't set size
  9205. Notes:    this call specifies the amount a subsequent call to AX=0001h should
  9206.       magnify the display
  9207.     scaling factors greater than 2 are only available in MAGic Deluxe
  9208. SeeAlso: AX=0001h
  9209. --------B-4A---------------------------------
  9210. INT 4A C - SYSTEM - USER ALARM HANDLER
  9211. Desc:    This interrupt is invoked by the BIOS when a real-time clock alarm
  9212.       occurs; an application may use it to perform an action at a
  9213.       predetermined time.
  9214. Note:    this interrupt is called from within a hardware interrupt handler,
  9215.       so all usual precautions against reentering DOS must be taken
  9216. SeeAlso: INT 1A/AH=06h
  9217. --------h-4A---------------------------------
  9218. INT 4A - Z100 - Slave 8259 - S100 vectored line 2
  9219. SeeAlso: INT 49"Z100",INT 4B"Z100"
  9220. --------b-4A---------------------------------
  9221. INT 4A - TI Professional PC - KEYBOARD DEVICE SERVICE ROUTINE
  9222.     no details available
  9223. SeeAlso: INT 47"TI Professional",INT 48"TI Professional"
  9224. SeeAlso: INT 49"TI Professional",INT 4C"TI Professional",INT 4D/AH=00h
  9225. SeeAlso: INT 5B"TI Professional"
  9226. --------O-4A---------------------------------
  9227. INT 4A - Acorn BBC Master 512 - "OSWORD" - MISC FUNCTIONS USING CONTROL BLOCK
  9228.     AL = function code
  9229.         FAh transfer data between 80186 and 65C12 I/O processor
  9230.     DS:BX -> control block (see #2354)
  9231. Return: FLAGS destroyed
  9232.     control block updated
  9233. Note:    there are more functions than are listed here, but details are not
  9234.       available
  9235. SeeAlso: INT 40"Acorn",INT 4B"Acorn",INT 4C"Acorn"
  9236.  
  9237. Format of BBC Master control block for function FAh:
  9238. Offset    Size    Description    (Table 2354)
  9239.  00h    BYTE    number of parameters sent to I/O processor (0Dh,0Eh)
  9240.  01h    BYTE    number of parameters read from I/O processor (01h)
  9241.  02h    DWORD    I/O processor address
  9242.  06h    DWORD    80186 segment:offset address
  9243.  0Ah    WORD    number of bytes to transfer
  9244.  0Ch    BYTE    operation type
  9245.         00h write to 65C12 at 24 us/byte
  9246.         01h read from 65C12 at 24 us/byte
  9247.         02h write to 65C12 at 26 us/word
  9248.         03h read from 65C12 at 26 us/word
  9249.         04h write to 65C12 at 10 us/byte using 256-byte blocks
  9250.         05h read from 65C12 at 10 us/byte using 256-byte blocks
  9251.  0Dh    BYTE    65C12 memory access control (only used if offset 00h = 0Eh)
  9252.         (see #2355)
  9253.  
  9254. Bitfields for 65C12 memory access control:
  9255. Bit(s)    Description    (Table 2355)
  9256.  7    unused
  9257.  6    always use main screen memory if I/O addr 3000h-7FFFh (overrides bit 5)
  9258.  5    use shadow screen memory if screen address specified
  9259.  4    use current ROM rather than ROM selected by bits 3-0 (only if I/O
  9260.       address between 8000h and BFFFh)
  9261.  3-0    paged ROM number
  9262. --------h-4B---------------------------------
  9263. INT 4B - Z100 - Slave 8259 - S100 vectored line 3
  9264. SeeAlso: INT 4A"Z100",INT 4C"Z100"
  9265. --------b-4B---------------------------------
  9266. INT 4B - TI Professional PC - PARALLEL PORT DEVICE SERVICE ROUTINE
  9267.     no details available
  9268. SeeAlso: INT 40"TI Professional",INT 48"TI Professional"
  9269. SeeAlso: INT 49"TI Professional",INT 4C"TI Professional",INT 4D/AH=00h
  9270. --------d-4B---------------------------------
  9271. INT 4B - Common Access Method SCSI interface (draft revision 1.9)
  9272.     ES:DI -> CAM Control Block (see #2367 at INT 4F/AX=8100h)
  9273. Notes:    the CAM committee moved the interface to INT 4F after revision 1.9
  9274.       to avoid conflicting with the IBM SCSI interface and the Virtual
  9275.       DMA specification
  9276.     the installation check for the driver is the string "SCSI_CAM" eight
  9277.       bytes past the INT 4Bh handler
  9278.     the only driver to date reported to use the CAM interface on INT 4B
  9279.       instead of INT 4F is from Future Domain (which has drivers for CAM
  9280.       on either interrupt)
  9281. SeeAlso: INT 4F/AX=8100h
  9282. Index:    installation check;Common Access Method SCSI interface
  9283. --------O-4B---------------------------------
  9284. INT 4B - Acorn BBC Master 512 - "OSBYTE" - MISC FUNCTIONS USING REGISTER PARAMS
  9285.     AL = function code
  9286.     BL = first parameter
  9287.     BH = second parameter (if needed)
  9288. Return: BL = first return parameter
  9289.     BH = second return parameter
  9290.     CF depends on function
  9291. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4C"Acorn"
  9292. --------d-4B80-------------------------------
  9293. INT 4B - IBM SCSI interface
  9294.     AH = 80h
  9295.     AL = 00h-10h (Corel PowerSCSI INT4BCAM.SYS)
  9296.     further details not yet available
  9297. --------d-4B8102DX0000-----------------------
  9298. INT 4B - Virtual DMA Specification (VDS) - GET VERSION
  9299.     AX = 8102h
  9300.     DX = 0000h
  9301. Return: CF clear if successful
  9302.         AH = major version number
  9303.         AL = minor version number
  9304.         BX = product number (see #2356)
  9305.         CX = product revision number
  9306.         always 0000h for QMAPS and HPMM.SYS
  9307.         always 0001h for Microsoft's EMM386.EXE v4.20-4.41
  9308.         DX = flags (see #2358)
  9309.         SI:DI = maximum DMA buffer size
  9310.     CF set on error
  9311.         AL = error code (see #2357)
  9312. Note:    bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
  9313.       apparently not always the case
  9314. SeeAlso: INT 2C/AX=002Bh,INT 31
  9315. Index:    installation check;Virtual DMA Spec
  9316.  
  9317. (Table 2356)
  9318. Values for VDS product number:
  9319.  0000h    for Quadtel's QMAPS and Hewlett-Packard's HPMM.SYS
  9320.  0001h    for Microsoft's EMM386.EXE
  9321.  0003h    for Windows 3.x WIN386.EXE
  9322.  0300h    OS/2 (all versions to date)
  9323.  0EDCh    for DR DOS 6.0 EMM386.SYS
  9324.  4560h    ("E`") for Qualitas' 386MAX
  9325.  4D43h    ("MC") for V Communications' Memory Commander
  9326.  5145h    ("QE") for Quarterdeck's QEMM-386
  9327.  524Dh    ("RM") for Helix's Netroom RM386
  9328.  
  9329. (Table 2357)
  9330. Values for VDS error code:
  9331.  01h    region not in contiguous memory
  9332.  02h    region crossed a physical alignment boundary
  9333.  03h    unable to lock pages
  9334.  04h    no buffer available
  9335.  05h    region too large for buffer
  9336.  06h    buffer currently in use
  9337.  07h    invalid memory region
  9338.  08h    region was not locked
  9339.  09h    number of physical pages greater than table length
  9340.  0Ah    invalid buffer ID
  9341.  0Bh    copy out of buffer range
  9342.  0Ch    invalid DMA channel number
  9343.  0Dh    disable count overflow
  9344.  0Eh    disable count underflow
  9345.  0Fh    function not supported
  9346.  10h    reserved flag bits set in DX
  9347.  
  9348. Bitfields for VDS flags:
  9349. Bit(s)    Description    (Table 2358)
  9350.  0    PC/XT bus (DMA in first megabyte only)
  9351.  1    physical buffer/remap region in first megabyte
  9352.  2    automatic remap enabled
  9353.  3    all memory is physically contiguous
  9354.  4-15    reserved (zero)
  9355. --------d-4B8103-----------------------------
  9356. INT 4B - Virtual DMA Specification - LOCK DMA REGION
  9357.     AX = 8103h
  9358.     DX = flags (see #2359)
  9359.     ES:DI -> DMA descriptor structure (see #2360,#2361,#2362)
  9360. Return: CF clear if successful
  9361.         DDS physical address field filled in
  9362.         DDS buffer ID field filled (0000h if no buffer allocated)
  9363.     CF set on error
  9364.         AL = error code (see #2357)
  9365.         DDS region size field filled wth maximum contiguous length in bytes
  9366. BUGS:    Windows 3.0 does not correctly support automatic remapping or copying
  9367.       in enhanced mode
  9368.     Windows 3.0 in enhanced mode does not return a correct code on error
  9369. SeeAlso: AX=8104h,AX=8105h
  9370.  
  9371. Bitfields for VDS flags:
  9372. Bit(s)    Description    (Table 2359)
  9373.  0    reserved (zero)
  9374.  1    data should be copied into buffer (ignored if 2 set)
  9375.  2    buffer should not be allocated if region noncontiguous or crosses
  9376.       physical alignment boundary specified by 4-5
  9377.  3    don't attempt automatic remap
  9378.  4    region must not cross 64K physical alignment boundary
  9379.  5    region must not cross 128K physical alignment boundary
  9380.  6-15    reserved (zero)
  9381.  
  9382. Format of DMA descriptor structure (DDS):
  9383. Offset    Size    Description    (Table 2360)
  9384.  00h    DWORD    region size
  9385.  04h    DWORD    offset
  9386.  08h    WORD    segment/selector
  9387.  0Ah    WORD    buffer ID
  9388.  0Ch    DWORD    physical address
  9389.  
  9390. Format of Extended DMA descriptor structure (EDDS):
  9391. Offset    Size    Description    (Table 2361)
  9392.  00h    DWORD    region size
  9393.  04h    DWORD    offset
  9394.  08h    WORD    segment/selector
  9395.  0Ah    WORD    reserved
  9396.  0Ch    WORD    number available
  9397.  0Eh    WORD    number used
  9398.  10h    DWORD    region 0 physical address
  9399.  14h    DWORD    region 0 size in bytes
  9400.  18h    DWORD    region 1 physical address
  9401.  1Ch    DWORD    region 1 size in bytes
  9402.     ...
  9403.  
  9404. Format of Extended DMA descriptor structure (EDDS) with page table entries:
  9405. Offset    Size    Description    (Table 2362)
  9406.  00h    DWORD    region size
  9407.  04h    DWORD    offset
  9408.  08h    WORD    segment/selector
  9409.  0Ah    WORD    reserved
  9410.  0Ch    WORD    number available
  9411.  0Eh    WORD    number used
  9412.  10h    DWORD    page table entry 0 (same as 80386 page table entry)
  9413.  14h    DWORD    page table entry 1
  9414.     ...
  9415. Note:    bits 1-11 of the page table entries should be zero; bit 0 set if page
  9416.       is present and locked
  9417. --------d-4B8104-----------------------------
  9418. INT 4B - Virtual DMA Specification - UNLOCK DMA REGION
  9419.     AX = 8104h
  9420.     DX = flags
  9421.         bit 0: reserved (zero)
  9422.         bit 1: data should be copied out of buffer
  9423.         bits 2-15 reserved (zero)
  9424.     ES:DI -> DMA descriptor structure (see #2360,#2361) with region size,
  9425.           physical address, and buffer ID fields set
  9426. Return: CF clear if successful
  9427.         DDS physical address field set
  9428.         DDS buffer ID field set (0000h if no buffer allocated)
  9429.     CF set on error
  9430.         AL = error code (see #2357)
  9431.         DDS region size field filled wth maximum contiguous length in bytes
  9432. Note:    Windows 3.0 does not check whether the region extends beyond the end of
  9433.       a segment
  9434. BUG:    Windows 3.0 in enhanced mode does not return a correct code on error
  9435. SeeAlso: AX=8103h,AX=8106h
  9436. --------d-4B8105-----------------------------
  9437. INT 4B - Virtual DMA Specification - SCATTER/GATHER LOCK REGION
  9438.     AX = 8105h
  9439.     DX = flags (see #2363)
  9440.     ES:DI -> Extended DMA descriptor structure (see #2361,#2362)
  9441.           region size, linear segment, linear offset, and number avail
  9442.           fields set
  9443. Return: CF clear if successful
  9444.         EDDS number used field set
  9445.         if DX bit 6 set, lower 12 bits of BX = offset in first page
  9446.     CF set on error
  9447.         AL = error code (see #2357)
  9448.         EDDS region size field filled with max length in bytes that can be
  9449.           locked and described in the EDDS table
  9450. BUG:    Windows 3.0 in enhanced mode may return zero instead of the physical
  9451.       page address for pages which were originally not present
  9452. SeeAlso: AX=8103h,AX=8106h
  9453.  
  9454. Bitfields for VDS flags:
  9455. Bit(s)    Description    (Table 2363)
  9456.  0-5    reserved (zero)
  9457.  6    EDDS should be returned with page table entries
  9458.  7    only present pages should be locked (not-present pages receive entry
  9459.       of 0000h)
  9460.  8-15    reserved (zero)
  9461. --------d-4B8106-----------------------------
  9462. INT 4B - Virtual DMA Specification - SCATTER/GATHER UNLOCK REGION
  9463.     AX = 8106h
  9464.     DX = flags (see #2364)
  9465.     ES:DI -> Extended DMA descriptor structure (see #2361,#2362) returned
  9466.           by AX=8105h
  9467. Return: CF clear if successful
  9468.     CF set on error
  9469.         AL = error code (see #2357)
  9470. Note:    according to the Microsoft version of the VDS specification, the
  9471.       actual scatter/gather list is ignored, while according to the IBM
  9472.       version of the specification, "the result of a LOCK operation"
  9473.       must be provided to this function
  9474. SeeAlso: AX=8104h,AX=8105h
  9475.  
  9476. Bitfields for VDS flags:
  9477. Bit(s)    Description    (Table 2364)
  9478.  0-5    reserved (zero)
  9479.  6    EDDS contains page table entries
  9480.  7    EDDS may contain not-present pages (entry = 0000h)
  9481.  8-15    reserved (zero)
  9482. --------d-4B8107-----------------------------
  9483. INT 4B - Virtual DMA Specification - REQUEST DMA BUFFER
  9484.     AX = 8107h
  9485.     DX = flags
  9486.         bit 0: reserved (zero)
  9487.         bit 1: data should be copied into buffer
  9488.         bits  2-15 reserved (zero)
  9489.     ES:DI -> DMA descriptor structure (see #2360) with region size set
  9490.           (also region offset and region segment if DX bit 1 set)
  9491. Return: CF clear if successful
  9492.         DDS physical address and buffer ID set
  9493.         DDS region size filled with length of buffer
  9494.     CF set on error
  9495.         AL = error code (see #2357)
  9496. SeeAlso: AX=8108h
  9497. --------d-4B8108-----------------------------
  9498. INT 4B - Virtual DMA Specification - RELEASE DMA BUFFFER
  9499.     AX = 8108h
  9500.     DX = flags
  9501.         bit 0: reserved (zero)
  9502.         bit 1: data should be copied out of buffer
  9503.         bits 2-15 reserved (zero)
  9504.     ES:DI -> DMA descriptor structure (see #2360,#2361) with buffer ID set
  9505.           (also region size/region offset/segment if DX bit 1 set)
  9506. Return: CF clear if successful
  9507.     CF set on error
  9508.         AL = error code (see #2357)
  9509. BUG:    under Windows 3.0 Enhanced mode, you must specify that data be copied
  9510.       for this function to work correctly
  9511. SeeAlso: AX=8107h
  9512. --------d-4B8109DX0000-----------------------
  9513. INT 4B - Virtual DMA Specification - COPY INTO DMA BUFFER
  9514.     AX = 8109h
  9515.     DX = 0000h
  9516.     ES:DI -> DMA descriptor structure (see #2360,#2361) with buffer ID,
  9517.           region segment/offset, and region size fields set
  9518.     BX:CX = starting offset into DMA buffer
  9519. Return: CF clear if successful
  9520.     CF set on error
  9521.         AL = error code (see #2357)
  9522. BUG:    Windows 3.0 Enhanced mode does not correctly interpret the copy count
  9523. SeeAlso: AX=810Ah
  9524. --------d-4B810ADX0000-----------------------
  9525. INT 4B - Virtual DMA Specification - COPY OUT OF DMA BUFFER
  9526.     AX = 810Ah
  9527.     DX = 0000h
  9528.     ES:DI -> DMA descriptor structure (see #2360,#2362) with buffer ID,
  9529.           region segment/offset, and region size fields set
  9530.     BX:CX = starting offset into DMA buffer
  9531. Return: CF clear if successful
  9532.     CF set on error
  9533.         AL = error code (see #2357)
  9534. BUG:    Windows 3.0 Enhanced mode does not correctly interpret the copy count
  9535. SeeAlso: AX=8109h
  9536. --------d-4B810B-----------------------------
  9537. INT 4B - Virtual DMA Specification - DISABLE DMA TRANSLATION
  9538.     AX = 810Bh
  9539.     BX = DMA channel number
  9540.     DX = 0000h
  9541. Return: CF clear if successful
  9542.     CF set on error
  9543.         AL = error code (see #2357)
  9544. SeeAlso: AX=810Ch
  9545. --------d-4B810C-----------------------------
  9546. INT 4B - Virtual DMA Specification - ENABLE DMA TRANSLATION
  9547.     AX = 810Ch
  9548.     BX = DMA channel number
  9549.     DX = 0000h
  9550. Return: CF clear if successful
  9551.         ZF set if disable count decremented to zero
  9552.     CF set on error
  9553.         AL = error code (see #2357)
  9554. SeeAlso: AX=810Bh
  9555. --------Q-4B810D-----------------------------
  9556. INT 4B - QEMM-386 - BUG
  9557.     AX = 810Dh
  9558. Note:    the code in QEMM v5.11 and 6.00 jumps to an invalid location on this
  9559.       call
  9560. --------h-4C---------------------------------
  9561. INT 4C - Z100 - Slave 8259 - S100 vectored line 4
  9562. SeeAlso: INT 4B"Z100",INT 4D"Z100"
  9563. --------b-4C---------------------------------
  9564. INT 4C - TI Professional PC - CLOCK/ANALOG INTERFACE
  9565.     no details available
  9566. SeeAlso: INT 40"TI Professional",INT 49"TI Professional"
  9567. SeeAlso: INT 4A"TI Professional",INT 4B"TI Professional",INT 4D/AH=00h
  9568. SeeAlso: INT 58"TI Professional"
  9569. --------O-4C---------------------------------
  9570. INT 4C - Acorn BBC Master 512 - "OSCLI" - INTERPRET COMMAND LINE
  9571.     DS:BX -> CR-terminated command string
  9572. Return: FLAGS destroyed
  9573. SeeAlso: INT 40"Acorn",INT 4A"Acorn",INT 4B"Acorn"
  9574. --------!---Section--------------------------
  9575.